cr:经典
题目15
求s=a+aa+aaa+aaaa+aa...a的值。
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
思路:
看完题目我是不懂题目要求的,看完C站的例子才完整理解题目要求。
肯定是要用循环的,截至条件就是最后一个加数位数符合要求。我觉得也可以反过来加,从最长位数那个开始加,加完一次就除以一个十,然后直到最后除完结果是0。但是现在的问题就是如何确定第一个数字,我想到可以用switch-case语句,反过来,从高到低逐个位数进行赋值!
代码:
#include<stdio.h>
main()
{
int a, n, n2;
printf("输入要计算的数字:");
scanf("%d", &a);
printf("输入要计算的最大位数:");
scanf("%d", &n);
n2 = n;
switch (n) {
case 5:n = a * 10000;
case 4:n = a * 1000 + n;
case 3:n = a * 100 + n;
case 2:n = a * 10 + n;
case 1:n = a * 1 + n;
}
if (n2 != 5) {
n -= n2;
}
int i, sum = 0;
for (i = 0; i < n; i++) {
sum = sum + n;
n = n / 10;
}
printf("\n结果是:%d\n", sum);
}
对方:
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include<stdio.h>
int main()
{
int s=0,a,n,t;
printf("请输入 a 和 n:\n");
scanf("%d%d",&a,&n);
t=a;
while(n>0)
{
s+=t;
a=a*10;
t+=a;
n--;
}
printf("a+aa+...=%d\n",s);
return 0;
}
反思&收获:
在写代码的时候没想到对方这样简洁的方法,用循环来写加数。我觉得对方这个思路太“绕”了,我一时半会儿想不到这样的方法。但是我的方法还需要改进:无法做到更长位数的计算。这一点应该需要靠循环来解决。在写的时候出现了一些问题,比如说判断n2而不是n,还有要乘的是a而不是n2。这些写代码过程中的小细节都要注意好,不然写出来的代码就会有问题!
cr:小林
思路:
这是之前“经典”中做过的题目。设置一个有40位的数组,前两个赋值为1;接下来的数字从a[2]开始,都等于前两个数字之和;全部算完之后,从0开始逐个输出。
代码:
#include<stdio.h>
main()
{
int a[40] = { 1,1 }, i;
for (i = 2; i < 40; i++) {
a[i] = a[i - 1] + a[i - 2];
}
for (i = 0; i < 40; i++) {
printf("%-10d", a[i]);
}
printf("\n");
}
对方:
#include <stdio.h>
int main() {
int f1 = 1,f2 = 1;
int i;
for (int i = 1; i<=20; i++) { //结束条件
printf("%12d %12d",f1,f2);
if(i%2 == 0) printf("\n"); //if语句作用是使输出4个数后换行
f1 = f1+f2;
f2 = f2+f1;
}
return 0;
}
反思&收获:
对方的代码减少了循环次数,且十分巧妙、简洁高效!