C++编程,求1+22+333+4444+。。。的前N项和(N<=9)。帮忙看下下面这个程序有什么错误么?谢谢

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
main()
{
int n,i;
long int w,s=0;
int k=1;
printf("请输入N的值(n<10)\n");
scanf("%d",&n);
while(k<=n)
{
w=0;
for(i=0;i<k;i++)
{
w+=(long int)pow(10,i)*k;
}
s+=w;
k++;
}
printf("%d\n",s);
system("pause");
return main();
}
我问的是这个算法有没有错误。因为最后得出来的结果不对。N为1,2的时候是对的,但是从3开始就不对了~~
3的结果是353 4的结果是4793.
我是用DEV-c++4.9.9.2 运行的。真的结果不对。会不会是我的软件有问题或者设置不对。

基本没有问题,不过:
1 main()前面没指定返回值类型, 应该你用的vc6.0吧,这种形式不标准,趁早改。
标准的就2种,一种是int main(); 另一种是 int main(int argc, char* argv[])

2 pow里面第一个参数写成10.0或者10.0f吧,不然在我的vs2008会有函数重载2义性错误。

To 楼上: main函数是可以递归的,网上可以搜到很多。而且他这么递归可以让程序多次计算不同的N的和,你运行下就知道了。

回答补充:
我的是vs2008,结果正确, 3是356, 4是4800

参考资料:自己经验

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-19
没有错,是正确的 .我运行过了,没错啊!!!
第2个回答  2019-07-21
程序本身是没有问题的,出错是因为某些编码不对,上面都是<(小于号)被转成了<(这是html小于号的编码),所以你的程序应为下面:
#include
"stdio.h"
#include
"stdlib.h"
#include
"math.h"
main()
{
int
n,i;
long
int
w,s=0;
int
k=1;
printf("请输入N的值(n<10)\n");//<改为<
scanf("%d",&n);//<改为<
while(k<=n)
{
w=0;
for(i=0;i<k;i++)//<改为<
{
w+=(long
int)pow(10,i)*k;
}
s+=w;
k++;
}
printf("%d\n",s);
system("pause");
return
main();
}
第3个回答  2010-02-19
不知道最后一句return main();是什么意思~~~

就算是递归,main函数也不能拿来递归的~~~
相似回答