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

如题!万分感激。... 如题!万分感激。 展开
 我来答
yql0105
2011-04-28 · TA获得超过730个赞
知道答主
回答量:150
采纳率:100%
帮助的人:217万
展开全部
首先,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次方,不过那样时间和空间复杂度都开销很大
你再理解一下吧,不懂可以再问,希望对你有帮助
伍拾步
推荐于2017-12-16 · TA获得超过8199个赞
知道大有可为答主
回答量:1852
采纳率:100%
帮助的人:1895万
展开全部
有疑问联系我。。。

#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(); /*暂停屏幕,方便查看结果*/
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
283968474
2011-04-28 · TA获得超过151个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:128万
展开全部
定义整型量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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光xl不锈
2011-04-28 · TA获得超过194个赞
知道答主
回答量:94
采纳率:0%
帮助的人:73.1万
展开全部
大哥,好不容易编出来啦,没分给个最佳答案吧,程序绝对正确
/*
求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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liangyanchaohr
2011-04-28 · TA获得超过808个赞
知道答主
回答量:74
采纳率:0%
帮助的人:0
展开全部
long a=2,b=2;
for(i=0;i<n;i++) /*n为个数*/
{
b*=10;
b+=2
a+=b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式