编写程序,求 Sn=a+aa+aaa+...+aaaa...aaa(n个a)的值,其中a是一个数字,

 我来答
魔天牙
推荐于2016-12-02 · 超过21用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:0
展开全部
#include <iostream>
using namespace std;

// Sn = a + aa + aaa + ... + (n个a)
// uA表示a
// uN表示n
// 返回值为Sn
unsigned int SigmaN(unsigned int uA, unsigned int uN);

// Re = n个a
// uA表示a
// uN表示n
// uH表示a的位数(十进制)
// 返回值为Re
unsigned int Recursive(const unsigned int uA, const unsigned int uN, const unsigned int uH);

int main()
{
unsigned int a;
unsigned int n;

cout<<"Sn = a + aa + aaa + ... + (n个a)"<<endl<<"请输入a值:";
cin>>a;
cout<<"请输入n值:";
cin>>n;
cout<<"Sn = "<<SigmaN(a, n)<<endl;

system("pause");
return 0;
};

unsigned int SigmaN(unsigned int uA, unsigned int uN)
{
// 判断a值和n值,如果其中任何一个为0则直接返回0
if ((0 == uA)||(0 == uN))
{
return 0;
}

// 判断a值是几位数
const unsigned int uDecimal = 10; // 十进制的进制
unsigned int uMedian = 1; // 存贮a值的位数
unsigned int uTemp = uA; // 临时存放a值
bool bIsFinish = false; // 是否结束判断循环
do
{
uTemp -= uDecimal*uMedian; // a值减去某位数的最小
if (uTemp > uA) // 若a值为负(这里使用的是无符号整形,计算为负时数据溢出为一个极大值,所以比原来大。这里不是很严谨,不适用于大数的计算。)
{
bIsFinish = true; // 得到实际位数,准备结束循环
}
else
{
uTemp = uA; // 没有得到实际位数,重置临时变量为原始a值
uMedian++; // 位数自加
}
} while (!bIsFinish);
unsigned int uHex = 1; // 存放a值到aa值的进制(待以下循环计算得出)
for (unsigned int u = 0; u < uMedian; u++)
{
uHex *= uDecimal;
}

// 计算Sn
unsigned int uSn = 0; // 初始化Sn
for (unsigned int u = 0; u < uN; u++)
{
uSn += Recursive(uA, u+1, uHex);
}
return uSn;
}

unsigned int Recursive(const unsigned int uA, const unsigned int uN, const unsigned int uH)
{
// 若n值为1,则直接返回a值
if (1 == uN)
{
return uA;
}
else
{
unsigned int uHex = uH; // 这一层实际应乘以的进制(待以下循环计算得出)
for (unsigned int i = 2; i < uN; i++)
{
uHex *= uH;
}
return uA*uHex+Recursive(uA, uN-1, uH);
}
}

// 我只是考虑了a值可能是十位数、百位数之类的,哪里逻辑混乱了?
口钱脱1i
2010-11-18 · TA获得超过1149个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:508万
展开全部
楼上的做的很复杂,而且逻辑较乱。
但是能实现。

楼主看这个。

#include<stdio.h>

int main()
{
int n,a;
printf("请输入你要n和a:\n");
scanf("%d %d",&n,&a);
int sum=0;
for(int i=0;i<n-1;i++)
{
a+=a*10;
sum+=a;
}
printf("sum=%d.\n",sum);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友303b813
2010-11-18 · TA获得超过1749个赞
知道小有建树答主
回答量:438
采纳率:0%
帮助的人:563万
展开全部
#include<stdio.h>
void main()
{
int sum=0;
int a=2;
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++ )
{
sum =sum + a;
a = (a*10+2); // 需不断更新a,
}
printf("%d",sum);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式