黑马程序员技术交流社区
标题: 一题多解(我自己的思考)希望我帮助 [打印本页]
作者: zhanggaoyuan 时间: 2015-6-23 21:32
标题: 一题多解(我自己的思考)希望我帮助
求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入。(只有主要代码)
第一种我自己第一次做出的
void myway1(){
// 定义变量
int j,n,a;
int c,b,S;
// 提示用户输入 一个数 n a
printf("提示用户输入 n a\n");
scanf("%d",&n);
scanf("%d",&a);
//给变量赋值
c = a,b = a,S = a;
// 用for外层循环控制n个数相加
for (j =1;j<n;j++){
b *= 10;
c += b;
S += c;
}
// 输出S(n)
printf("%d\n",S);
}
第二种 老师给的答案
void teacherway(){
// 定义变量
int a = 0,n = 0,temp = 1,k = 0,sum = 0;
// 提示用户输入 a,n的值
printf("请输入a和n的值:\n");
scanf("%d%d",&a,&n);
// for的外层循环实现
for (int i = 0;i < n ;i++){
k = a;
temp = 1; // 累加思想
for(int j = 0;j < i; j++){
temp *=10;
k += temp*a;
}
printf("k = %d\n",k);
sum += k;
}
printf("sum = %d\n",sum);
}
第三种采用递归
int producta(int n,int a){
int k = 0;
if(n == 1){
k = a;
}else{
k = producta(n-1,a)*10 + a;
}
return k; // 两个参数
}
int main(int argc, const char * argv[]) {
// 定义变量
int n = 0,a = 0;
int k = 0,sum = 0;
// 提示用户输入 变量 n 和 a
printf("请输入 n 和 a :\n");
scanf("%d,%d",&n,&a);
// 调用函数实现运算
for (int i = 1;i <= n;i++){
k = producta(i,a );
printf("k = %d\n",k);
sum += k;
}
// 输出计算的结果
printf("sum = %d\n",sum);
return 0;
}
:victory:
作者: XiaoBaoMi 时间: 2015-6-23 21:46
楼主的方法不错 学习了
作者: 李旭飞 时间: 2015-6-23 21:52
递归玩的6,真心懂了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |