鱼C论坛

 找回密码
 立即注册
查看: 1887|回复: 20

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

[复制链接]
发表于 2019-12-5 21:03:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 笨小孩丶 于 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: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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-5 21:30:29 | 显示全部楼层
会出现警告converting to 'long int 'from 'duoble'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 21:10:54 | 显示全部楼层
正解??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)));//---->[i]sum += a * ((pow(10, i) - 1) / 9)[/i]
        }
        //s+=sum;多此一举删掉
    }
    //while(n--);删
     printf("%d+%d+%d+...+%d的值为:%d",a, a*11, a*111, a*((pow(10, n) - 1) / 9) ,sum);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 21:14:32 | 显示全部楼层
是a+aa+aaa+....还是a+a*a+a*a*a+....???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 21:15:57 | 显示全部楼层
李龙江 发表于 2019-12-5 21:14
是a+aa+aaa+....还是a+a*a+a*a*a+....???

a+aa+aaa+...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 21:23:30 | 显示全部楼层
bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()

你这样理论上只要一层循环就可以,但就是一层循环,运行结果也不对;     程序会警告数据类型不匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 21:27:04 | 显示全部楼层
bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()

我试了一你的,还是不行
警告for的循环体的数据类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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++) {
......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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[n];
        for (i = 1; i <= n; i++)
        {
            int tmp = a * ((pow(10, i) - 1) / 9);
            arr[i - 1] = tmp; 
            sum += tmp;
        }
        if (n == 1)
        {
            printf("%d的累加值为:%d\n", arr[0], sum);
        }
        else if (n == 2)
        {
           printf("%d+%d的累加值为:%d\n", arr[0], arr[1], sum);
        }
        else if (n == 3)
        {
            printf("%d+%d+%d的累加值为:%d\n", arr[0], arr[1], arr[2], sum);
        }
        else
        {
            printf("%d+%d+%d+...+%d的累加值为:%d\n", arr[0], arr[1], arr[2], arr[n - 1], 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>  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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”  就再好不过了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 21:56:44 From FishC Mobile | 显示全部楼层
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 22:10:13 | 显示全部楼层
bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include

我自个把j删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 22:12:29 | 显示全部楼层
bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include

我的结果不是0 哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 22:15:35 | 显示全部楼层

那就对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 22:17:05 | 显示全部楼层

对的,j是我调试的时候加的,忘了删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 22:18:13 | 显示全部楼层
bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include

呃……j是我前面调试的时候加的刚刚复制给他的时候忘了删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表