笨小孩丶 发表于 2019-12-5 21:03:18

应该是for循环”循环体”内有问题?自己不知道怎么错了?求大佬解答

本帖最后由 笨小孩丶 于 2019-12-5 21:25 编辑

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222,,,,希望能在原代码的基础上给出正解!!程序警告是数据类型的问题


#include <stdio.h>
#include <math.h>
int main()
{
    int i,n,a;
    long int s=0,sum=0;
    printf("若a的值为:");
    scanf("%d",&a);
    printf("\n");
    printf("输入相加的个数:");
    scanf("%d",&n);
    do
    {
      for(i=1;i<=n;i++)
      {
            sum+=a*( pow(10,(n-i)));
      }
      s+=sum;
    }
    while(n--);
      printf("a+aa+aaa+...+aa...a的值为:%d",s);
      return 0;
}

笨小孩丶 发表于 2019-12-5 21:30:29

会出现警告converting to 'long int 'from 'duoble'

李龙江 发表于 2019-12-5 21:10:54

正解??

bin554385863 发表于 2019-12-5 21:11:12

本帖最后由 bin554385863 于 2019-12-5 21:20 编辑

#include <stdio.h>
#include <math.h>
int main()
{
    int i,n,a;
    long int s=0,sum=0;
    printf("若a的值为:");
    scanf("%d",&a);
    printf("\n");
    printf("输入相加的个数:");
    scanf("%d",&n);
    do
    {
      for(i=1;i<=n;i++)
      {
            sum+=a*( pow(10,(n-i)));//---->sum += a * ((pow(10, i) - 1) / 9)
      }
      //s+=sum;多此一举删掉
    }
    //while(n--);删
   printf("%d+%d+%d+...+%d的值为:%d",a, a*11, a*111, a*((pow(10, n) - 1) / 9) ,sum);
      return 0;
}

李龙江 发表于 2019-12-5 21:14:32

是a+aa+aaa+....还是a+a*a+a*a*a+....???

笨小孩丶 发表于 2019-12-5 21:15:57

李龙江 发表于 2019-12-5 21:14
是a+aa+aaa+....还是a+a*a+a*a*a+....???

a+aa+aaa+...

笨小孩丶 发表于 2019-12-5 21:23:30

bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()


你这样理论上只要一层循环就可以,但就是一层循环,运行结果也不对;   程序会警告数据类型不匹配

笨小孩丶 发表于 2019-12-5 21:27:04

bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()


我试了一你的,还是不行
警告for的循环体的数据类型

superbe 发表于 2019-12-5 21:35:51

每次for循环前应该将sum重置为0
do
    {
      for(sum = 0, i=1;i<=n;i++)
      {
            sum+=a*( pow(10,(n-i)));
      }
      s+=sum;
    }
    while(n--);

或把sum=0放在for前面:
sum = 0;
for (i = 1; i <= n; i++) {
......

李龙江 发表于 2019-12-5 21:36:40

本帖最后由 李龙江 于 2019-12-5 22:24 编辑

你代码里的s+=sum;意思是s=s+sum;
但是你的循环体中有sum+=a*( pow(10,(n-(i+j))));也就是sum=sum+a*( pow(10,(n-(i+j))));
这个时候你的sum就是你要求的s;
所以你要得出结果的话可以直接输出sum!
最后附上正确代码:
#include <stdio.h>
#include <math.h>
int main()
{
    int i,n,a;
    long int s=0,sum=0;
    printf("若a的值为:");
    scanf("%d",&a);
    printf("\n");
    printf("输入相加的个数:");
    scanf("%d",&n);
    do
    {
      for(i=1;i<=n;i++)
      {
            sum+=a*( pow(10,(n-i)));
      }
    }
    while(n--);
      printf("a+aa+aaa+...+aa...a的值为:%d",sum);
      return 0;
}

ba21 发表于 2019-12-5 21:43:35


#include <stdio.h>

int main(void)
{
        int i, n;
        long a, tmp, sum=0;

        printf("若a的值为:");
        scanf("%d", &a);

        printf("\n");
    printf("输入相加的个数:");
        scanf("%d", &n);

        // 累加次数
        tmp = a;
        for( i=0; i<n; i++ )
        {               
                sum += tmp;
                tmp = tmp *10 + a;
               
        }

        printf("a+aa+aaa+...+aa...a的值为:%ld\n", sum);

        return 0;
}


#include <stdio.h>

long getNewA(int n, int a)
{
        int tmp;

        tmp = a;
        while( n )
        {
                tmp *= 10;
                tmp += a;
                n--;
        }

        return tmp;
}

int main(void)
{
        int i, n;
        long a, tmp=0, sum=0;

        printf("若a的值为:");
        scanf("%d", &a);

        printf("\n");
    printf("输入相加的个数:");
        scanf("%d", &n);

        // 累加次数
        for( i=0; i<n; i++ )
        {
                tmp = getNewA(i, a);
                sum += tmp;
               
        }

        printf("a+aa+aaa+...+aa...a的值为:%ld\n", sum);

        return 0;
}

bin554385863 发表于 2019-12-5 21:45:05

本帖最后由 bin554385863 于 2019-12-5 21:53 编辑

#include <stdio.h>
#include <math.h>
int main()
{
    int i, n, a;
    long int s = 0, sum = 0;
    while (1)
    {
      printf("若a的值为:");
      scanf("%d", &a);
      if (a == -1)
      {
            printf("退出");
            break;
      }
      printf("输入相加的个数:");
      scanf("%d", &n);
      int arr;
      for (i = 1; i <= n; i++)
      {
            int tmp = a * ((pow(10, i) - 1) / 9);
            arr = tmp;
            sum += tmp;
      }
      if (n == 1)
      {
            printf("%d的累加值为:%d\n", arr, sum);
      }
      else if (n == 2)
      {
         printf("%d+%d的累加值为:%d\n", arr, arr, sum);
      }
      else if (n == 3)
      {
            printf("%d+%d+%d的累加值为:%d\n", arr, arr, arr, sum);
      }
      else
      {
            printf("%d+%d+%d+...+%d的累加值为:%d\n", arr, arr, arr, arr, sum);
      }
      sum = 0;
      printf("\n");
    }
    return 0;
}
=========================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-jaa2frmq.5by --stdout=Microsoft-MIEngine-Out-dceezew3.cqe --stderr=Microsoft-MIEngine-Error-fy0kbms3.kvz --pid=Microsoft-MIEngine-Pid-swfyxg21.j5c --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
若a的值为:1
输入相加的个数:1
1的累加值为:1

若a的值为:1
输入相加的个数:2
1+11的累加值为:12

若a的值为:1      
输入相加的个数:3
1+11+111的累加值为:123

若a的值为:1
输入相加的个数:9
1+11+111+...+111111111的累加值为:123456789

若a的值为:2
输入相加的个数:1
2的累加值为:2

若a的值为:2
输入相加的个数:3
2+22+222的累加值为:246

若a的值为:4
输入相加的个数:9
4+44+444+...+444444444的累加值为:493827156

若a的值为:2
输入相加的个数:9
2+22+222+...+222222222的累加值为:246913578

若a的值为:3
输入相加的个数:5
3+33+333+...+33333的累加值为:37035

若a的值为:-1
退出
E:\Users\admin\Documents\VScode\Code>

笨小孩丶 发表于 2019-12-5 21:48:49

李龙江 发表于 2019-12-5 21:36
你代码里的s+=sum;意思是s=s+sum;
但是你的循环体中有sum+=a*( pow(10,(n-(i+j))));也就是sum=sum+a*( pow ...

谢谢大佬,能解释一下那个converting to” long int ”form”double”就再好不过了!

jackz007 发表于 2019-12-5 21:56:44

本帖最后由 jackz007 于 2019-12-5 22:22 编辑

      楼主试试这个代码?
#include <stdio.h>
#include <math.h>
int main()
{
      int a , d , i , j , n ;
      long int s=0,sum=0;
      printf("若a的值为:");
      scanf("%d",&a);
      printf("\n");
      printf("输入相加的个数:");
      scanf("%d",&n);
      for(sum = 0 , i = 1 ; i <= n ; i ++) {
                for(d = 0 , j = 0 ; j < i ; j ++) d = d * 10 + a ;
                sum += d;
      }
      printf("a+aa+aaa+...+aa...a的值为:%d",sum) ;
      return 0;
}

bin554385863 发表于 2019-12-5 21:58:47

本帖最后由 bin554385863 于 2019-12-5 22:01 编辑

李龙江 发表于 2019-12-5 21:36
你代码里的s+=sum;意思是s=s+sum;
但是你的循环体中有sum+=a*( pow(10,(n-(i+j))));也就是sum=sum+a*( pow ...

兄弟你的代码有问题啊
#include <stdio.h>
#include <math.h>
int main()
{
    int i,n,a,j;
    long int s=0,sum=0;
    printf("若a的值为:");
    scanf("%d",&a);
    printf("\n");
    printf("输入相加的个数:");
    scanf("%d",&n);
    do
    {
      for(i=1;i<=n;i++)
      {
            sum+=a*( pow(10,(n-(i+j))));//------j都没初始化
      }
    }
    while(n--);
      printf("a+aa+aaa+...+aa...a的值为:%d",sum);
      return 0;
}
这是我调试的结果,你看下对不对
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-uydpujsr.jd0 --stdout=Microsoft-MIEngine-Out-pfqbc2sa.vmm --stderr=Microsoft-MIEngine-Error-5xseei2d.13r --pid=Microsoft-MIEngine-Pid-ggjnlabf.yqb --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
若a的值为:1

输入相加的个数:1
a+aa+aaa+...+aa...a的值为:0
E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-1hhzw04b.2jx --stdout=Microsoft-MIEngine-Out-0nkaoejb.3y3 --stderr=Microsoft-MIEngine-Error-qcgipgtp.0cy --pid=Microsoft-MIEngine-Pid-bzbbyylz.4a4 --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
若a的值为:1

输入相加的个数:2
a+aa+aaa+...+aa...a的值为:0
E:\Users\admin\Documents\VScode\Code>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-xolf0ukk.hax --stdout=Microsoft-MIEngine-Out-dnbrj3jw.q5m --stderr=Microsoft-MIEngine-Error-nl2tdkjc.kc0 --pid=Microsoft-MIEngine-Pid-n4qjjwjn.3p5 --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
若a的值为:1

输入相加的个数:9
a+aa+aaa+...+aa...a的值为:0
E:\Users\admin\Documents\VScode\Code>

笨小孩丶 发表于 2019-12-5 22:10:13

bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include


我自个把j删了

笨小孩丶 发表于 2019-12-5 22:12:29

bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include


我的结果不是0 哦

bin554385863 发表于 2019-12-5 22:15:35

笨小孩丶 发表于 2019-12-5 22:10
我自个把j删了

那就对了

李龙江 发表于 2019-12-5 22:17:05

笨小孩丶 发表于 2019-12-5 22:10
我自个把j删了

对的,j是我调试的时候加的,忘了删了

李龙江 发表于 2019-12-5 22:18:13

bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include


呃……j是我前面调试的时候加的刚刚复制给他的时候忘了删了
页: [1] 2
查看完整版本: 应该是for循环”循环体”内有问题?自己不知道怎么错了?求大佬解答