今天老师给我们出了这样得题!
80+81+.....+89+810+811+.....+899+8100+8101+......+8999+81000
怎么做这道题呀。。
----------------解决方案--------------------------------------------------------
#include <stdio.h>
void main()
{
long int i;
long int sum=0;
for(i=81;i<=81000;i++)
{
sum=sum+i;
}
printf("%ld",sum);
}
----------------解决方案--------------------------------------------------------
楼上的你做错了,这个要求各位达到9以后乘10再累加
----------------解决方案--------------------------------------------------------
这个程序还比较有点意思,我帮你写了, 用的递归,当然用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); } }
----------------解决方案--------------------------------------------------------
哈哈,睡眼惺忪,如果是考试那就惨了
----------------解决方案--------------------------------------------------------
可看成如下规律: 80+ [( 81+.....+89)+ (810+811+.....+899) + (8100+8101+......+8999)]+ 81000 代码不必太长了: #include<iostream.h> void main() { int i, a, temp; long sum=(80+81000); for (i=81,a=9; i<=8100; i*=10,a*=10) for (temp=i; temp<10*a; temp++) sum += temp; cout<<"Result: "<<sum<<endl; } 运行结果: Result: 7853300 注: 和我用公式笔算结果完全吻合。
[此贴子已经被作者于2005-2-24 14:52:35编辑过]
----------------解决方案--------------------------------------------------------
#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; }
----------------解决方案--------------------------------------------------------
#include <iostream>
long Sum(int n,int first,int end);
void main(void)
{
long m_jieguo;
m_jieguo=80+Sum(9,81,89)+Sum(90,810,899)+Sum(900,8100,8999)+81000;
cout<<m_jieguo<<endl;
}
long Sum(int n,int first,int end)
{
long jieguo=n*(first+end)/2;
return jieguo;
}
----------------解决方案--------------------------------------------------------
好强都,我新来的
以后大家多多帮助啊
----------------解决方案--------------------------------------------------------
看来大家都没看懂这道题,把每个数字前的8去掉看看,是不是很清楚了,剩下的编程就是几行就搞定了
----------------解决方案--------------------------------------------------------