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;
}
浙公网安备 33010602011771号