c语言某书的页码从1开始,统计数字问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

昨天做这个题目真的火来了,做了几个小时就是对数字0的统计出错,其他1~9的统计完全这确,晚上又拿着它琢磨,数字0统计出错,放弃了,这么简单的问题竟然折磨死人,刚才改了程序,编译运行通过,计算结果完全正确!此题出自计算机算法设计与分析课后的习题,想拿来和大家讨论!此程序可以计算出0~2147483647(即(2^31)-1)的页码数!

#include 

#include

int main()

{

void dev(int[],int);

long int n,i;

int a[10]={0};

printf("请输入书的页码数n(0

scanf("%d",&n);

for(i=1;i<=n;i++)

dev(a,i);

printf("\n");

for(i=0;i<10;i++)

printf("编码为%d的个数:\t\t%-d\n",i,a[i]);

getch();

}

void dev(int array[],int number)

{

int a,b,c,d,e,f,g,h;

a=number/10000000; /*分离第八位*/

b=number/1000000%10; /*分离第七位*/

c=number/100000%10; /*分离第六位*/

d=number/10000%10; /*分离第五位*/

e=number%10000/1000; /*分离第四位*/

f=number%1000/100; /*分离第三位*/

g=number%100/10; /*分离第二位*/

h=number%10; /*分离第一位*/

/*分离方法值得反思,这里就是节约内存的分离方法,所以定义a~h为整型数,而不是长整型数的原因*/

if(a!=0)

{array[a]++;array[b]++;array[c]++;array[d]++;array[e]++;array[f]++;array[g]++;array[h]++;}

else if(b!=0)

{array[b]++;array[c]++;array[d]++;array[e]++;array[f]++;array[g]++;array[h]++;}

else if(c!=0)

{array[c]++;array[d]++;array[e]++;array[f]++;array[g]++;array[h]++;}

else if(d!=0)

{array[d]++;array[e]++;array[f]++;array[g]++;array[h]++;}

else if(e!=0)

{array[e]++;array[f]++;array[g]++;array[h]++;}

else if(f!=0)

{array[f]++;array[g]++;array[h]++;}

else if(g!=0)

{array[g]++;array[h]++;}

else if(h!=0)

{array[h]++;} /*变量做下标,统计数字,匠心独运*/

}

算法如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值