展开全部
首先,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次方,不过那样时间和空间复杂度都开销很大
你再理解一下吧,不懂可以再问,希望对你有帮助
也就是说,比如已经求出了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次方,不过那样时间和空间复杂度都开销很大
你再理解一下吧,不懂可以再问,希望对你有帮助
展开全部
有疑问联系我。。。
#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);
}
#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(); /*暂停屏幕,方便查看结果*/
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义整型量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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥,好不容易编出来啦,没分给个最佳答案吧,程序绝对正确
/*
求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");
}
/*
求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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
long a=2,b=2;
for(i=0;i<n;i++) /*n为个数*/
{
b*=10;
b+=2
a+=b;
}
for(i=0;i<n;i++) /*n为个数*/
{
b*=10;
b+=2
a+=b;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询