今天老师给我们出了这样得题!
80+81+.....+89+810+811+.....+899+8100+8101+......+8999+81000
怎么做这道题呀。。
这个程序还比较有点意思,我帮你写了, 用的递归,当然用for循环也可以做,主要是想练练手 #include <stdlib.h> #include "string.h" #include "math.h" #define Min 80 #define Max 81000 long sum(int n);
void main() { long a; a=sum(80); printf("sum=%ld",a); getchar(); }
long sum(int n) { int m; int flag;
//如果低于最小的或高于最大的返回0 if(n<Min||n>Max) return 0;
//计算除最高位以外所有的数字 m=n%((int)pow(10,(int)log10(n))); //判断除最高位外所有的数字是否全是9 if(m==0) flag=0; else flag=1; while(m!=0) { if(m%10!=9) { flag=0; break; } m=m/10; }
//如果各位达到9以后乘10再累加 //否则下一个数字递增1 if(flag) { m=(int)8*pow(10,(int)log10(n)+1)+pow(10,(int)log10(n)); return n+sum(m); } else { return n+sum(n+1); } }
#include <stdio.h> #include <math.h> #include <conio.h>
int main() { int i,j; long sum=80+81000; for(i=0;i<3;i++) { sum+=81*pow(10,i); for(j=81*pow(10,i)+1;j<90*pow(10,i);j++) { sum+=j; } } printf("The result is %ld\n",sum); getch(); return 0; }