hdu4608 - I-number(水题)
来源:互联网 发布:止汗露的危害 知乎 编辑:程序博客网 时间:2024/05/29 12:26
多校联赛第一场1009
有点大数的意思。。。
从给定的X往上加就行了。。。
对于n位的数字来说,
假如不需要增加长度就可以找到Y的话,那么Y < X + 20
证明:假如前n-2位的数字之和为CC, 则CC%10肯定是位于【0...9】之中的,所以后两位只需对应凑出【10....1】即可。
其中为了凑出10需要用两位形成【19,28,37,,,91】中的数,所以我们最多只需要动用两位。
给出这样的例子:如992000--->992019
假如需要增加长度的话,如9999这样的数,
那么后面第一个Y值肯定是100009这样的数,这样的数也满足式Y<X+20,所以既可以特判,也可以按照上面那种情况暴力。
代码如下:
#include <cstdio>#include <cstring>#define M 100005char str[M];int num[M], sum[M];int main (){ int t; scanf("%d",&t); while(t--) { scanf("%s",str); int len = strlen(str); for(int i = 0; i < len; i++) { num[i] = str[i]-'0'; sum[i] = i==0?num[i]:sum[i-1]+num[i]; } if(sum[len-1]==0) { printf("10\n"); continue; } num[len] = 0; while(1) { num[len-1]++; sum[len-1]++; if(num[len-1]==10) { for(int i = len-1; i >= 0; i--) { num[i] += num[i+1]/10; num[i+1]%=10; } if(num[0]==10) break; for(int i = 0; i < len; i++) sum[i] = i==0?num[i]:sum[i-1]+num[i]; } if(sum[len-1]%10==0) break; } if(sum[len-1]%10==0&&num[0]!=10) for(int i = 0; i < len; i++) printf("%d",num[i]); else { printf("1"); for(int i = 0; i < len-1; i++) printf("0"); printf("9"); } printf("\n"); } return 0;}
- hdu4608 - I-number(水题)
- HDU4608 I-number
- HDU4608:I-number
- HDU4608:I-number
- hdu4608:I-number
- MUTC2013 J-I-number-hdu4608
- I-number(hdu4608,暴力枚举)
- hdu4608
- hdu4608
- HDU4608+模拟
- I-number
- I-number
- I - I-number
- HDU4608+简单题
- hust I-number题解
- hdu 4608 I-number
- hdu 4608 I-number
- hdu 4608 I-number
- .balignl的意义
- UVALive 5864 Register Allocation 解题报告
- 多校联合赛(一) 1008 Park Visit
- C语言中变量的作用域
- Oracle索引的使用
- hdu4608 - I-number(水题)
- C++拷贝构造函数(深拷贝,浅拷贝)
- java异常1
- Linux中的分段
- poj 1873 The Fortified Forest (暴力搜索+凸包求周长)
- NSTimer和CADisplayLink的用法
- jQuery给控件赋值
- [Erlang 0104] 当Erlang遇到Solr
- chrome插件:Enable Copy解除网页无法复制限制