用C语言怎么写类似s=2+22+222+2222+22222?希望能给个详尽的解题过程,主要是算法问题,谢谢了。

如题!万分感激。

首先,n个2的计算方法是2*(10的n次方)+ (n-1)个2
也就是说,比如已经求出了2222后,变到22222只要加上2乘以10的5次方
而该试首相已知,就是2,那么第二项就是2+2*(10的1次方),第三项就是2+(第二项的结果)*(10的2次方),第四项就是2+(第三项的结果)*(10的3次方),而这10的n次方也可以不用一遍遍算的那么麻烦,我们也可以用一个变量(比如命名为ten)来存储,第一项的时候乘以的是10的0次方,就是ten=1,第二项的时候乘以的是10,就是ten=ten*10,第三项是10的平方,依然可以ten=ten*10...依次类推
最后只要再把这n个数加起来即可
综上所述,我们可以写出一个函数来计算n个aaa...aa的函数
//n表示项数,a表示数字(例如你给的题中a=2)
long fun(int a,int n)
{
long ten=1,t=0,s=0;
int i,j;
for(i=0;i<n;++i)
{
for(ten=1,t=j=0;j<=i;++j)
{
t+=a*ten;
ten*=10;
}
s+=t;
}
return s;
}
已经用VC++6.0试过了,是对的
这个方法应该是最省时间和空间的,当然你也可以用函数来求10的n次方,不过那样时间和空间复杂度都开销很大
你再理解一下吧,不懂可以再问,希望对你有帮助
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
有疑问联系我。。。

#include <stdio.h>
#define n 5 //加数共有5项
void main()
{
int i,sum=0,temp=0;
for (i=1;i<=n;i++)
{
temp=temp*10+2;//加数中后一项为前一项的10倍再加2
sum+=temp;
}
printf("sum=%d\n",sum);
}追问

temp=temp*10+2;//加数中后一项为前一项的10倍再加2
程序上面的这句错了,我用的是WIN-Tc编译器。不知道为什么错了?

追答

貌似win-tc不支持用//表示注释

你试试这个

#include "stdio.h"
#include "conio.h"
#define n 5 /*加数共有5项*/
void main()
{
int i,sum=0,temp=0;
for (i=1;i<=n;i++)
{
temp=temp*10+2;/*加数中后一项为前一项的10倍再加2*/
sum+=temp;
}
printf("sum=%d\n",sum);
getch(); /*暂停屏幕,方便查看结果*/
}

追问

for (i=1;i<=n;i++)
{
temp=temp*10+2;//加数中后一项为前一项的10倍再加2
sum+=temp;
}
上面的看不懂,FOR语句关于的是i变量,为什么下面又是TEMP变量啊?这两个变量不一样,怎么循环啊?

追答

i变量是用来统计已经加到第几项了。。。。
而temp则是用来表示第i项的加数的值
例如i=2
则此时应该是加到第2项
temp=(前一项)2*10+2=22

本回答被提问者采纳
第2个回答  2011-04-28
定义整型量s,i,j,k和n i主要用来存放最高位的数 比如20 200 2000。。。j主要存放整个数 比如2 22 222 2222。。。。n为数的个数 k控制循环 s为和 代码如下:
#include<stdio.h>
main()
{
int s,i,k,j,n;
printf("请输入求和的第一个数和求和数的个数");
scanf("%d%d",&i,&n);
s=j=i;
for(k=1;k<n;k++)
{
i*=10;
j+=i;
s+=j;
}
printf("%d",s);
}
第3个回答  2011-04-28
大哥,好不容易编出来啦,没分给个最佳答案吧,程序绝对正确
/*
求s=a+aa+aaa+....的值,其中a是一个数字,例如2+22+222...(此时共三个数相加),
几个数相加由键盘控制
*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void function(unsigned long int b,unsigned long int m); //实现a+aa+aaa+...=的结果

int main(void)
{
unsigned long int a,n,l,t=0,count=0;

printf("input a number 'a' and controlled number 'n':");
scanf("%d,%d",&a,&n);

l=a; //保存a的值
do{
t+=a;
a*=10;
++count;
if(count<n)
printf("%ld+",t);
else printf("%ld=",t); //打印诸如a+aa+aaa+...=形式
}while(count<n);

a=l; //还原a值
function(a,n);
}

void function(unsigned long int b,unsigned long int m)
{
unsigned long int i,j;
double s,sum=0.0;
for(i=1;i<m+1;i++)
for(j=0;j<i;j++)
{
s=0.0;
s=b*pow(10,j); //实现 b*10^j+b*10^(j-1)+....+b
sum+=s;
}
printf("%.0f\n",sum);
system("pause");
}
第4个回答  2011-04-28
long a=2,b=2;
for(i=0;i<n;i++) /*n为个数*/
{
b*=10;
b+=2
a+=b;
}

用C语言怎么写类似s=2+22+222+2222+22222?希望能给个详尽的解题过程,主 ...
首先,n个2的计算方法是2*(10的n次方)+ (n-1)个2 也就是说,比如已经求出了2222后,变到22222只要加上2乘以10的5次方 而该试首相已知,就是2,那么第二项就是2+2*(10的1次方),第三项就是2+(第二项的结果)*(10的2次方),第四项就是2+(第三项的结果)*(10的3次方),...

用C语言编程求S=2+22+222+……+2222…2
计算思路很多比如:2+(2*10+2)+(2*10^2+2)。。(2*10^n+2)但考虑数字长度不定,n可能会很大,那么就不能用一般整型类型存储(因为大小有限,超出就溢出了),所以采用字符串保存及按位计算。当然不能超出内存限制。include <stdio.h>#include<malloc.h>#include<string.h>char *getNum(...

C语言编程: s=2+22+222+2222+22222+222222
222=22*10+2 ……所以可以通过一个for循环求出每个加数,并累加。参考代码:include <stdio.h>int main(){ int i,n=2,sum=0;for(i=1;i<=6;i++){sum += n;n = n*10+2; }printf("%d\\n",sum);return 0; }\/*246912*\/ ...

C语言,用递归实现S=2+22+222+2222+2..2(n个2)
否则超出界限,可以通过long型改善,但也是有限的。如果要想实现无限位运算算法就比较麻烦了 这就和阶乘算法一样,范围要控制好

利用循环计算 2+22+222+2222+22222的值
i); \/*pow是立方函数,pow(10,i)表示10的i次方*\/ SUM+=sum1; \/*SUM表示除第一项外,从第二项相加之和*\/ } printf("%ld",SUM+n);} \/ 本程序可以不仅可以算2+22+222+2222+22222;还可以算一般情况n+nn+nnn+nnnn+nnnnn+...+可加到m个n;需要输入n 和 m \/ ...

计算2+22+222+2222+22222的C语言程序
其次i+=2*10^n 不对,C语言中^表示亦或 不是次方。还有printf应该放在循环外边,只输出最后一次。还有循坏少一次,N从1到4只循环了4次,所以for里边应该是i<=5。include<stdio.h>void main(){ int i=2,n=1,sum=0; \/\/变量初始化 for(;n<=5;n++) { sum+=i; i=i*10+2; } ...

计算2+22+222+2222+22222+222222+2222222的结果..用C语言for循环怎么写...
{ a = 2;for(int j = 1;j<i+2;j++) \/\/算出没个数的大小 { a+=(int)(b*pow(10,j));} sum+=a;} sum+=2;\/\/前边算出的和我并没有算第一个数2,所以在这里还要加上2 printf("它们的和是:%d\\n",sum);\/\/呵呵 你可以运行一下 看看我的程序对不对 刚刚写的 } ...

求vfp,Sum=2+22+222+2222+22222在线等答案
如果要建立程序,输入数据,可以这样写:clear b=""c=""accept "输入数据" to a for i=1 to 5 c=c+a b=b+"+"+c endfor Sum=b ?"Sum=",b,"=",&b 否则,改动一下就可以了

...其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和n均由...
\/\/求的值,其中a是一个数字 \/\/如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。#include <stdio.h> void main(){ int a,n,i=2,b,result=0;printf("请输入a的值:\\na=");scanf("%d",&a);printf("请输入n的值:\\nn=");scanf("%d",&n); b=a;if (n==1){...

c语言的一个循环问题
程序说的很明白,这里的“ i ”确实是项数,表示的是2+22+222+……这个多项式的项的个数,比如:这个多项式为2+22+222+2222,则项数 i =4;变量term的值表示的是当前一项的值,当i=1时,即此多项式只有一项也就是2,由于term的初值是0,所以此时term=0*10+2=2;sum+=term 即表示 sum=sum...

相似回答