计蒜客-加一

来源:互联网 发布:日本媳妇 知乎 编辑:程序博客网 时间:2024/05/17 03:11

数组内存放了一些个位数字,组成一个大数(从高位到低位),现在将这个数加 1,并输出加一以后的结果。

例如:

A = [2,3,1,1,4]

则结果为

[2,3,1,1,5]


A = [7,8,9]

则结果为

[7,9,0]

输入格式

第一行输入一个正整数 n(1≤n≤100),接下来的一行,输入用空格分隔的 n 个 0到 9 的非负整数组成的数组 A[n]。

输出格式

输出一行,nn 个用空格分隔的整数,表示加一后的新数组。

样例输入

5
8 9 9 9 9

样例输出

9 0 0 0 0


思路

其实就是把数组最后的一位加一,用循环从后往前进行判断是否能进位,不能的话则输出数组,那么有一个很关键的在于我们的数组大小是n,如果输入的数为[9 9 9 9 9],这种情况下,我们的数组会溢出,解决办法之一就是多构建一个数组,把计算完之后所有的数字全部存在新的数组里面。
但是,我觉得那样做有点麻烦,所以想了个取巧的办法,当最高位为9时,它撑死就进1,所以我们可以先用if进行判断,然后先把数字之前的最高位归0,然后用printf打印一个1在最开头,这样就就解决了数组溢出的问题,我们也不用再构建一个数组。

例如:[9 9 9 9 9]

加一之后,所有位都进一,所以我们先把满足进位条件的那位先置0,在把高位加1
到最高位的时候,我们就先用printf打印一个1,然后把最高位置0,这时候我们数组里面存的就是[0 0 0 0 0],但是由于先打印了1,最后我们的结果就是 1 0 0 0 0 0.


代码如下:

#include<stdio.h>int main(){    int n;    int A[100];    scanf("%d",&n);    for(int i=0;i<n;i++){        scanf("%d",&A[i]);    }    A[n-1]+=1;         //先把最低位加一    int j=n-1;           //把数组大小赋值给j    while(1){        if(A[j]>9){     //如果数组大于9,则进位,并把该位置0             A[j]=0;            A[--j]+=1;            if(j==0&&A[j]==10){      // 如果最高位等于10                A[0]=0;                        //先置0                printf("1 ");                 //然后再打印一个1作为最高位                break;            }        }        else if(A[j]<10)              //如果哪一位不能到10,意味着不能进位,跳出循环            break;    }     for(int k=0;k<n;k++){         printf("%d ",A[k]);       //打印数组     }}

printf("I LOVE BOSS");
原创粉丝点击