求和a+aa+…+aaaa(n个a),求和结果总是不对,但是自己没找到错在哪里。

mingloee 2016-11-15 09:10:56
源代码: # include <stdio.h> # include <math.h> int main (void) { int a, n, i, j ; unsigned long sum, p ; sum = 0 ; printf ("请输入a和n的值:\n") ; scanf ("%d %d", &a, &n) ; for (i = 0; i < n; i++) { for (j = 0, p = 0; j <= i; j++) { p += a * pow (10, j) ; } sum += p ; } printf ("sum = %lu\n", sum) ; return 0 ; }
...全文
313 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-11-15
  • 打赏
  • 举报
回复
这样呢?

# include <stdio.h>
# include <math.h>
int main (void)
{

	int  a,  n,  i,  j, k ;
	unsigned long   sum,  p, t ;
	sum  =  0 ;

	printf ("请输入a和n的值:\n") ;
	scanf ("%d  %d", &a,  &n) ;

	for (i = 0;  i < n;  i++)
	{
		for (j = 0, p = 0;  j <= i;  j++)
		{ 
			for (k = 0, t=1;  k < j;  k++)
				t *= 10;
			p  +=  a * t ;
		}
		sum  += p ;
	}
	printf ("sum = %lu\n", sum) ;

	return 0 ;
} 
mingloee 2016-11-15
  • 打赏
  • 举报
回复
引用 6 楼 Saleayas的回复:
(1+(1+...(1+a)*a)...*a)*a 不要用 pow ,只用+ 和 *,并且迭代。
对迭代法还不熟,请问用这种方法怎么去迭代
Saleayas 2016-11-15
  • 打赏
  • 举报
回复
(1+(1+...(1+a)*a)...*a)*a 不要用 pow ,只用+ 和 *,并且迭代。
mingloee 2016-11-15
  • 打赏
  • 举报
回复
谢谢楼上朋友们的帮助和建议
fefe82 2016-11-15
  • 打赏
  • 举报
回复
pow (10, j) 可能有误差
litchgu 2016-11-15
  • 打赏
  • 举报
回复

# include <stdio.h>
# include <math.h>
int main (void)
{

	int  a,  n,  i,  j ;
	float   sum ,p;

	sum  =  0 ;

	printf ("请输入a和n的值:\n") ;
	scanf ("%d  %d", &a,  &n) ;

	for (i = 0;  i < n;  i++)
	{
		for (j = 0, p = 0;  j <= i;  j++)
		{ 
			p  +=  a * pow ((float)10,j) ;
		}
		sum  += p ;
	}
	printf ("sum = %lf\n", sum) ;

	return 0 ;
} 
关键是pow函数你用的有问题啊,注意下参数和返回值的类型。
小灸舞 2016-11-15
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
tommy_6143 2016-11-15
  • 打赏
  • 举报
回复
把这一行
 p  +=  a * pow (10,  j) ;
中的pow(10,j)移出来做一个单独变量即可。
# include <stdio.h>
# include <math.h>
#include<stdlib.h> 
int main (void)
{
int  a,  n,  i,  j,p ,sum;
float k;
sum  =  0 ;

printf ("请输入a和n的值:\n") ;
scanf ("%d  %d", &a,  &n) ;

for (i = 0;  i < n;  i++)
      {
            for (j = 0, p = 0;  j <= i;  j++)
                   { 
                          k = pow(10,j);
						   p  +=  a * k ;
                    }
            sum  += p ;
       }
   printf ("sum = %d\n", sum) ;
system("pause");
  return 0 ;
}
检验通过。
mingloee 2016-11-15
  • 打赏
  • 举报
回复
这神结贴,瞬间无语了
赵4老师 2016-11-15
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
    scanf("%d",&n);
    for (j=0;j<n;j++) {
        scanf("%s%s",a1,a2);

        L=strlen(a1);
        for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

        L=strlen(a2);
        for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

        for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

        for (i=0;i<MAXLEN;i++) {
            if (v3[i]>=10) {
                v3[i+1]+=v3[i]/10;
                v3[i]=v3[i]%10;
            }
        }

        printf("Case %d:\n", j+1);
        printf("%s + %s = ", a1, a2);

        z=0;
        for (i=MAXLEN-1;i>=0;i--) {
            if (z==0) {
                if (v3[i]!=0) {
                    printf("%d",v3[i]);
                    z=1;
                }
            } else {
                printf("%d",v3[i]);
            }
        }
        if (z==0) printf("0");

        printf("\n");
    }
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧