-
-
[代码之美]题1 提交------新思路
-
发表于: 2008-11-21 09:23 7327
-
花了很多时间想这个,终于给我弄出来了。思路如下:从右起扫描每一个数字,该数字右边的数字为numR,去掉右边后的数字为numL,每一个数字在当前位或更低位出现的次数收到当前数字的大小,numR和numL/10的影响,可以根据他们计算出来。我思路也不是十分清晰,所以弄了很久,表达不清楚具体怎么算,看代码吧。另外0的出现次数要另外多加处理,我原来的就是其他数字的出现次数都算正确,就是0出现问题,今天早上一起来早餐没吃就弄,到现在终于弄出来了。测试过多组数据,如果有谁发现我的程序有问题请指正!
#include<stdio.h> unsigned a[10]={0,0,0,0,0,0,0,0,0,0}; // 确保范围 void CountEachNum(unsigned num) { unsigned numR,numL,temp,i; unsigned flag=1; numL=num; while(numL!=0) { numR=num%flag; temp=10*flag; temp=(num%temp)/flag; a[temp]=a[temp]+numR+1; if(temp==0) a[temp]=a[temp]-flag; for(i=1;i<temp;i++) a[i]=a[i]+flag; for(i=0;i<10;i++) a[i]=a[i]+(numL/10)*flag; flag=10*flag; numL=num/flag; } } void main() { FILE *fin,*fout; unsigned i,j,k,n,num; if((fin=fopen("in.txt","r"))==NULL) { printf("Open in.txt ERROR"); return ; } if((fout=fopen("out.txt","w"))==NULL) { printf("Open out.txt ERROR"); return ; } fscanf(fin,"%u",&n); for(j=0;j<n;j++) { fscanf(fin,"%u",&num); CountEachNum(num); for(i=0;i<10;i++) fprintf(fout,"%u ",a[i]); fprintf(fout,"\n"); for(k=0;k<10;k++) // 清空全局数组 a[k]=0; } fclose(fin); fclose(fout); }
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]怪事呀,到底谁在作怪? 2228
- [求助]再见怎么杀都还在的病毒 5430
- [求助]怎么清除这种病毒,好像是rootkit 4154
- [讨论]这样是不是也算实现了自删除 5146
- [分享]C语言中很多人不知道的小知识 5083
看原图
赞赏
雪币:
留言: