应该是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;
}
会出现警告converting to 'long int 'from 'duoble' 正解?? 本帖最后由 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;
} 是a+aa+aaa+....还是a+a*a+a*a*a+....??? 李龙江 发表于 2019-12-5 21:14
是a+aa+aaa+....还是a+a*a+a*a*a+....???
a+aa+aaa+...
bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()
你这样理论上只要一层循环就可以,但就是一层循环,运行结果也不对; 程序会警告数据类型不匹配 bin554385863 发表于 2019-12-5 21:11
#include
#include
int main()
我试了一你的,还是不行
警告for的循环体的数据类型 每次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 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;
}
#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: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: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 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 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> bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include
我自个把j删了 bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include
我的结果不是0 哦 笨小孩丶 发表于 2019-12-5 22:10
我自个把j删了
那就对了
笨小孩丶 发表于 2019-12-5 22:10
我自个把j删了
对的,j是我调试的时候加的,忘了删了 bin554385863 发表于 2019-12-5 21:58
兄弟你的代码有问题啊
#include
#include
呃……j是我前面调试的时候加的刚刚复制给他的时候忘了删了
页:
[1]
2