JSK-135 数字加1【大数】

数字加1
现在我们用一个数组来表示一个数字,数组中每一个数字表示真实数字上每一位的值。例如int a= {1,2,3} ,表示数字123,现在要进行一个操作,对数组表示的数字加1,再存入该数组中。
输入:输入的是一行数字,每个数字都在0到9之间。
输出:输出是将这个数组中元素按顺序打印出来,每两个元素之间用空格分隔
提示:数组如果因为进位导致长度不够,可以重新申请数组空间,将数字存入到新的数组
样例输入
1 2 3
样例输出
1 2 4

问题链接JSK-135 数字加1
问题描述:(略)
问题分析
    这是一个大数加法问题。使用long long类型也无法表示的数通常成为大数,即大整数。
    大整数计算通常用数组模拟计算。
    需要注意的是,阿拉伯记数法中,高位在左边,低位在右边。加法运算是从右到左。把数存储在数组中,高位存储在下标小的元素里,低位存储在下标大的元素里。
    这个题的BUG是,没有指出一行数字有多少个!用C++来实现不是问题,用C语言实现有点尴尬。
程序说明:(略)
参考链接:(略)
题记:想不到好方法则或暴力或模拟。

AC的C语言程序如下:

/* JSK-135 数字加1 */

#include <stdio.h>

#define BASE 10
#define N 1024
int a[N];

int main(void)
{
    int n = 1;

    while(scanf("%d", &a[n]) == 1)
        n++;

    int carry = 1, i;
    a[0] = 0;
    for(i = n - 1; carry; i--) {
        a[i] += carry;
        carry = a[i] / BASE;
        a[i] %= BASE;
    }

    i = a[0] ? 0 : 1;
    printf("%d", a[i++]);
    for(; i < n; i++)
            printf(" %d", a[i]);
    printf("\n");

    return 0;
}

posted on 2018-10-15 20:24  新海岛Blog  阅读(152)  评论(0)    收藏  举报

导航

// ... runAll: function() { this.resetPreCode(); hljs.initHighlightingOnLoad(); // 重新渲染,添加语法高亮 hljs.initLineNumbersOnLoad(); // 为代码加上行号 } // ...