1013—Digital Roots
来源:互联网 发布:centos gcc rpm安装包 编辑:程序博客网 时间:2024/06/06 00:10
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1013
收获:一个数的各个位数之和除以9的余数等于这个数除以9的余数。
原因:从各个数位来分析:个位上的数的大小没有发生变化;十位数将10看成了1、看少了1个9,20看成了2、看少了2个9,…;百位上将100看成了1、看少了11个9,200看成了2、看少了22个9,…;……这些少看的若干个9除以9之后得到的余数都是0,根据同余原理,起决定性作用的是所有数字之和除以9之后的余数,所以,一个数的各个位数相加的和除以9的余数与这个数除以9的余数相等。。(摘抄别人的理解)
e.g相等把那个数看成ab,则各个位数相加的和除以9就是(a+b)÷9 ,这个数除以9就是(10a+b)÷9所以下面的比上面的多了9a,9a就是9的倍数
第二个代码比较好理解~~
我的代码1:
#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){char uu[1005];int i;int a;while(gets(uu)&&uu[0]!='0'){a=0;int i;for(i=0;i<strlen(uu);i++)a+=uu[i]-'0';a=a%9;if(a==0)a=9;printf("%d\n",a);}return 0;}
上面代码中:如果a+=uu[i]-'0'改为a=a*10+uu[i]-'0',则还应该{a=a*10+uu[i]-'0';a=a%9;}如果不加“{}”,则由于a的范围题目没给,可能很大,int是满足不了的~~
我的代码2:
#include<stdio.h>#include<string.h>#include<stdlib.h>int ro(int n){int sum=0,i;for(i=n;i>0;i=i/10)sum+=i%10;return sum;}int main(){char uu[1005];while(gets(uu)&&uu[0]!='0'){int i,sm=0;for(i=0;i<strlen(uu);i++)sm+=uu[i]-'0';while(1){sm=ro(sm);if(sm<=9)break;}printf("%d\n",sm);}return 0;}
- 1013—Digital Roots
- HDU—— 1013 Digital Roots
- 杭电acm—1013 Digital Roots
- HDU 1013 Digital Roots
- HDU 1013 Digital Roots
- 1013:Digital Roots
- hdu 1013 Digital Roots
- HDOJ 1013 Digital Roots
- HDU 1013 Digital Roots
- 1013 Digital Roots
- HDU 1013 Digital Roots
- HDU 1013 Digital Roots
- hdu 1013 Digital Roots
- HDU 1013 Digital Roots
- hdu 1013 Digital Roots
- HDU--1013--Digital Roots
- HDOJ 1013 Digital Roots
- hdu 1013 Digital Roots
- 自增运算符在gcc和vc下的不同结果
- nufront平台添加RTC时钟芯片ds1307
- 控 制 器
- glusterFS: self-heal 的触发条件
- 异步加载图片
- 1013—Digital Roots
- 运维中有用的命令
- MySQL安装指南
- mysql 4字节unicode 错误问题
- C/C++中static关键字详解
- 再论二维数组传参问题
- Android面试系列之一
- HDU 1829 并查集up
- 抽象类和接口的区别