用C语言编程求S=2+22+222+……+2222…2
16个回答
展开全部
计算思路很多比如:2+(2*10+2)+(2*10^2+2)。。(2*10^n+2)
但考虑数字长度不定,n可能会很大,那么就不能用一般整型类型存储(因为大小有限,超出就溢出了),所以采用字符串保存及按位计算。当然不能超出内存限制。
#include <stdio.h>
#include<malloc.h>
#include<string.h>
char *getNum(int len);//获取任意位数的 22222...的数字字符串
char *Addnum(char *sum,char *num);//两数字字符串按十进制数字相加后存储在sum中返回
int main(void)
{
int len,i;
char *num=NULL,*sum=NULL;
printf("请输入要累加的数字最高位数为:");
scanf("%d",&len);
sum=(char *)malloc(sizeof(char)*(len+1));//总和存储 最大位数+2
memset(sum,'0',len+1);
sum[len]=0;
for(i=1;i<=len;i++)
{
num=getNum(i);
sum=Addnum(sum,num);
if(i==len)
printf("%s",num);
else
printf("%s+",num);
}
printf("=%s",sum);
return 0;
}
char *getNum(int len)//获取任意位数的 22222...的数字字符串
{
int i;
char *num=(char *)malloc(sizeof(char)*(len+1));
for(i=0;i<len;i++)
num[i]='2';
num[i]=0;
return num;
}
char *Addnum(char *sum,char *num)//两数字字符串按十进制数字相加后存储在sum中返回
{
int add,jw=0,y=0;
char *p1=sum,*p2=num;//定义2个指针,分别指向sum和num的最后一个字符地址
while(*p1++!=0);
p1--;p1--;
while(*p2++!=0);
p2--;p2--;
while(1)
{
add=*p1-'0'+*p2-'0'+jw;
jw=add/10;
y=add%10;
*p1=y+'0';
if(p2==num)
{
if(jw>0)
*(--p1)=jw+'0';
break;
}
else
{
p1--;
p2--;
}
}
return sum;
}
展开全部
/*
求S=2+22+222+……+2222…2,有N个数,最长数字为N个2组成
*/
#include<stdio.h>
#define MAX 1000
int main()
{
int i,j,n,t=0;
char a[MAX];
printf("输入长度n:\n"); //n个数:2,22,..., 2...2(n个)
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//随着数位增加,2的个数相应减少
t+=2; //按个位,十位,……N位顺序把各个加数里相应数位上的2相加
a[i]=(t%10)+'0'; //考虑到可能会超出数字精度,采用字符形式保存,
//如有进位,把进位数放到下一位加数上。
t=t/10;
}
for(i=n-1;i>=0;i--)
{
printf("%c",a[i]); //注意保存的顺序是反序,输出要从字符数组后面到前面
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
int main()
{
double s=0, a=0;//如果输入的n在12以下,可以改成int。
int i,n;
scanf("%d",&n);
for(i = 1; i <= n; i ++)
{
a=a*10+2;
s+=2;
}
printf("%.0lf\n", s);//如果用int s, 这里用%d
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码如下
#include<stdio.h>
unsigned long int fun2(unsigned int n)//n=5 结果 22222
{
int i;
unsigned long int tmp=0;
for(i=0;i<n;i++)
{
tmp = tmp*10;
tmp = tmp+2;
}
return tmp;
}
unsigned long int funHE(unsigned int n)//
{
int i;
unsigned long int tmp=0;
for(i=1;i<=n;i++)
{
tmp = tmp+fun2(i);
}
return tmp;
}
void main( )
{
printf("%d\r\n",funHE(5));
}
如图
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-12
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询