A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© donkey2 中级黑马   /  2014-11-12 00:27  /  5309 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 donkey2 于 2014-11-15 10:05 编辑


/*
求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入。
*/



#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
//        NSLog(@"Hello, World!");

        int a;
        long int result;

        int n;
        NSLog(@"请输入一个数字a和它的位数n");
        scanf("%i %i",&a,&n);
        for (;n>0 ; n--) {

            for (int i=0 ; n-1-i >= 0; i++) {
                result += a * pow(10, n-1-i);
            }
        }
        NSLog(@"计算结果为:%li",result);
    }
    return 0;
}
遇到的问题:
1. 开始没想到循环嵌套,直接result += a * pow(10, n-1),
这样的话,如果输入2 5,得到result = 22222,这是最大的数,显然不是和值。
于是想到用循环嵌套,得到2222,222,22,2,然后加和,得到最终结果。
2. 注意防止result溢出,可以设成长整型。

3 个回复

倒序浏览
另一种思路:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    int  a = 0, n = 0, temp = 1, k = 0, sum = 0;
    printf("请输入a和n的值:\n");
    scanf("%d%d", &a, &n);

    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);
    return 0;
}

这个做法是求出了每次的数值,然后累加起来。
也是很易懂的思路。


回复 使用道具 举报
定义函数 f(n,m) n表示多少个,m表示具体的数值,递归即可!
回复 使用道具 举报
唉 看着费劲啊 注释的有没有
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马