hdu1013(C++)

9的余数定理:一个数各位数字的总和除以9的余数与它本身除以9的余数同等

大数问题:防止大数,用字符串来存入数据,再转化为数字

#include<iostream>
#include<string>
using namespace std;
int main()
{
 int N,i;
 string s;
 while (cin>>s)
 {
  if (s[0] - ‘0‘ == 0)
   break;                      //遇0终止
  N = 0;
  for (i = 0; i < s.size(); i++)
   N += s[i] - ‘0‘;         //各位数字之和
  if (N % 9 == 0)
   cout << "9" << endl;
  else
   cout << N % 9 << endl;
 }
 return 0;
}

时间: 2024-08-13 01:21:07

hdu1013(C++)的相关文章

HDU1013 POJ1519 Digital Roots(解法三)

该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的余数,若余数为0则结果为9. 问题链接:HDU1013 POJ1519 Digital Roots.入门练习题,用C语言编写程序. 问题简述:输入若干正整数,求其数根,直到输入为0为止. 问题分析:数根是指整数的各个位的数字之和.如果其和为1位整数,则为结果:如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止.这个问题的大陷阱是,没有指出整数是多少位的.即使使用unsignde long long类型,也可能会

HDU1013 Digital Roots(解法二)

问题链接:HDU1013 Digital Roots.入门练习题,用C语言编写程序. 数根是指整数的各个位的数字之和.如果其和为1位整数,则为结果:如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止. 这个问题的大陷阱是,没有指出整数是多少位的.即使使用unsignde long long类型,也可能会溢出的.所以,需要先用字符串来处理. 之前的版本(参见:HDU1013 Digital Roots)不是最佳解,所以重新写了这个程序.一边输入一边处理,才是最佳的选择,可以省去存储空间.

解题报告:hdu1013 Digital Roots

2017-09-07 22:02:01 writer:pprp 简单的水题,但是需要对最初的部分进行处理,防止溢出 /* @theme: hdu 1013 Digital roots @writer:pprp @begin:21:52 @end:21:59 @error:虽然是水题,但是还是需要对最初的处理,如果过大超过了int范围,就出错了 @date:2017/9/7 */ #include <bits/stdc++.h> using namespace std; int main() {

HDU1013 Digital Roots 模拟//数学题

Problem Description: The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits

hdu1013 Digital Roots

思路: 九余数定理. http://blog.csdn.net/asd7f7/article/details/53994666 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 typedef long long ll; 6 7 char a[1005]; 8 9 int main() 10 { 11 int n; 12 while (t

hdu1013

#include<stdio.h> #include<string.h> int main() { char num[1000]; int len,sum,i; while(scanf("%s",&num)!=EOF) { len=strlen(num); if(len==1 && num[0]=='0') return 0; for(sum=0,i=0;i<len;i++) { sum=sum+num[i]-'0'; } prin

HDU1163 Eddy&#39;s digital Roots

问题链接:HDU1013 Digital Roots.入门练习题,用C语言编写程序. 这个问题是对于输入的n,计算n^n的数根. 先看一下以下式子: 因为:(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b 所以右边式子的数根(中间结果,也是左边式子的数根)为:a*a+2*a*b+b*b=(a+b)*(a+b) 故:对于两位数n,n*n的数根=n的树根×n的树根. 同理可以推出,对于任意位数的n,也满足:n*n的数根=n的树根×n的树根. 程序中,实现一个计算整数数根的

数学/hdu 1013 Digital Roots

题意 求一个数的数根,即各位数之和,再之和,直到为个位数 分析 首先,要知道这样一个结论: 任何一个整数模9同余于它的各数位上数字之和 具体证明过程如下: 设自然数N=a[n]a[n-1]…a[0],其中a[0],a[1].….a[n]分别是个位.十位.…上的数字 再设M=a[0]+a[1]+…+a[n] 求证:N≡M(mod 9). 证明:    ∵ N=a[n]a[n-1]…a[0]=a[n]*10^n+a[n-1]*10^(n-1)+…+a[1]*10+a[0].   又∵ 1≡1(mod

HDU 1013

题目:HDU1013 Digital Roots 题目分析:刚开始没注意到输入数字特别大的情况,使用了输入整型数字,并且用了递归,然后就时间超时了.后来看别人的代码才知道这题是个“数论”题,仔细发现便可得result = (n-1)%9+1,而且输入用字符输入. #include<stdio.h> #include<string.h> #include<math.h> int main() { int i,n,tmp; char a[1003]; while (scan