啊哈磊_编程从这里起步

标题: 1~999有多少个数该怎么写? [打印本页]

作者: 奈成    时间: 2014-2-20 20:23
标题: 1~999有多少个数该怎么写?
有一个123 456 789 ~997 998 999 是由1~999整数排列的一个数,它的第2013位数是什么?· 该怎么写?

作者: rosynirvana    时间: 2014-2-20 20:23
非要编程大概可以这么写吧
  1. #include <stdio.h>

  2. int main()
  3. {
  4.   int num = 1;
  5.   int digit_num = 0;
  6.   int digit = 0;
  7.   while(1){
  8.     if(num < 10){
  9.       digit_num += 1;
  10.       num += 1;
  11.       continue;
  12.     }
  13.     if(num < 100){
  14.       digit_num += 2;
  15.       num += 1;
  16.       continue;
  17.     }
  18.     if(digit_num + 3 < 2013){
  19.       digit_num += 3;
  20.       num += 1;
  21.       continue;
  22.     }
  23.    
  24.     if(digit_num + 3 == 2013){
  25.       digit = num % 10;
  26.       break;
  27.     }
  28.     if(digit_num + 3 == 2014){
  29.       digit = num % 100 / 10;
  30.       break;
  31.     }
  32.     digit = num / 100;
  33.     break;
  34.   }
  35.   printf("%d\n", digit);
  36.   return 0;
  37. }
复制代码

作者: rosynirvana    时间: 2014-2-20 21:22
这个难度不值得去编程吧
1位数9个
2位数90个
2013 - 9 - 90 x 2 = 1824
1824 = 3 x 608
所以就是第608个3位数的第三位,也就是707的第三位,就是7
作者: 张晟    时间: 2014-2-23 15:14
#include <stdio.h>

int main()
{
  int num = 1;
  int digit_num = 0;
  int digit = 0;
  while(1){
    if(num < 10){
      digit_num += 1;
      num += 1;
      continue;
    }
    if(num < 100){
      digit_num += 2;
      num += 1;
      continue;
    }
    if(digit_num + 3 < 2013){
      digit_num += 3;
      num += 1;
      continue;
    }
   
    if(digit_num + 3 == 2013){
      digit = num % 10;
      break;
    }
    if(digit_num + 3 == 2014){
      digit = num % 100 / 10;
      break;
    }
    digit = num / 100;
    break;
  }
  printf("%d\n", digit);
  return 0;
}
作者: portcc    时间: 2014-2-24 12:10
rosynirvana 发表于 2014-2-20 21:22
这个难度不值得去编程吧
1位数9个
2位数90个

不明觉厉,慢慢想
作者: cldelyn    时间: 2014-2-26 21:14
#include<stdio.h>
#define N 2013
int main()
{
int a[3]={9,200,3000};
int i,j,x,sum,m,n;

sum=N;
for(i=0;i<3;i++)
{
sum-=a[i];
if(sum<=0)
break;
}

sum+=a[i];

x=a[i];
for(j=0;j<=i;j++)
{x/=10;}


m=sum/x;
n=sum%x;


switch(n)
{
case 0:printf("%d",(m-1)%100);break;
case 1:printf("%d",(m-1)/100);break;
case 2:printf("%d",(m-1)/10%10);break;
}
getch();
}

作者: cldelyn    时间: 2014-2-26 21:15
rosynirvana 发表于 2014-2-20 21:22
这个难度不值得去编程吧
1位数9个
2位数90个

两位数是10~99有100个哟~
作者: rosynirvana    时间: 2014-2-26 21:49
cldelyn 发表于 2014-2-26 21:15
两位数是10~99有100个哟~

1到99多少个数?
然后1到9多少个?

99 - 9 = 90
作者: 风流种    时间: 2014-3-6 13:30
本帖最后由 风流种 于 2014-3-6 13:32 编辑

#include <stdio.h>
int main(void)
{

        int iNum=1;
        int iNumdigtal=0;
    int iDigtal=0;
    while(1)
        {
        if(iNum<10);
        {
                iNumdigtal+=1;
                iNum+=1;
            continue;
        }
       
        if(iNum<100)
        {
                        iNumdigtal+=2;
                        iNum+=1;
                    continue;
       
        }
       
        if(iNumdigtal+3<2013)
        {
                iNum+=1;
            iNumdigtal+=3;
            continue;
        }
       
                if(iNumdigtal+3==2013)
       
        {
                iDigtal=iNum%10;
             break;
        }
       
        if(iNumdigtal+3==2014)
        {
                iDigtal=iNum%100/10;
                   break;
       
        }
       
         
        iDigtal=iNum/100;
        break;
        }
             
                }

        printf("2013个数是%d\n",iDigtal);
        return 0;
}
帮我看看我这样的编程到底错在哪里,总是编译不过去





欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2