计蒜客-加一
来源:互联网 发布:日本媳妇 知乎 编辑:程序博客网 时间: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");
阅读全文
0 0
- 计蒜客019-加一
- 计蒜客-加一
- 计蒜客之加一
- 计蒜客 加一 (高精度)
- 加一
- 加一
- 加一
- 加一
- 加一
- 加一
- 加一
- 加一
- 加一
- 计蒜客 第19题:加一
- 【计蒜客系列】挑战难题19:加一
- 计蒜客 难题题库 019 加一
- 计蒜客 第19题:加一
- 指针的加一
- 使用sinopia搭建私有npm服务
- android获取当前运行Activity名字的方法
- mapbox相关资料
- 关于react用script标签引入jsx文件的问题
- lintcode python代码 488 快乐数
- 计蒜客-加一
- iOS 转让APP,变更开发商名字 —— HERO博客
- MySQL中group_concat函数深入理解
- Coderforces Chat room
- 简单句的五大句型
- 【机器学习】python第三方模块lda包调用代码
- TensorFlow 学习资源
- A tutorial on binary descriptors – part 3 – The ORB descriptor
- 字符流解析 储存