【C语言经典100题】(12月28日-day15)

 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;
}

反思&收获: 

 对方的代码减少了循环次数,且十分巧妙、简洁高效!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜東

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值