The input file will contain a list of positive integers, one per line. The integer may consist of a large number of digits. (1 <= input value <= 10^9)
For each integer in the input, output its digital root on a separate line of the output.
24 39
6 3
#include using namespace std; int fn(int x){ int y=0; while(x){ y+=x%10; x/=10; } int z=y; if(z<10) return z; else if(z>=10) return fn(z); } int main(){ int n,m=0; while(cin>>n){ if(n<10){ cout<<n<<endl; }else{ cout<<fn(n)<<endl; } } return 0; }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int i = scanner.nextInt(); while (i>=10){ int sum=0; while (i>0){ sum+=i%10; i=i/10; } i=sum; } System.out.println(i); } } }
和楼上比起来我也太呆了吧
#include<iostream> #include<string> using namespace std; string solve(string str){ while(str.length() > 1){ long long sum = 0; for(int i = 0; i < str.length(); i++) sum += str[i] - '0'; str = ""; int idx = 0; while(sum){ str += (char)(sum % 10 + '0'); sum /= 10; } } return str; } int main(){ string str; while(cin >> str){ cout << solve(str) << endl; } return 0; }
#include<iostream> #include<cstring> using namespace std; int judge(int* a,int len) { int total = 0; for (int i = 0; i < len; i++) total += a[i]; if (total / 10 == 0) return total % 10; else { int temp = 0; while (total > 0) { a[temp++] = total % 10; total /= 10; } return judge(a, temp); } } int main() { char ch[30]; while (cin >> ch) { int total = 0; int a[30]; for (int i = 0; i<strlen(ch); i++) a[i] = ch[i] - '0'; cout<<judge(a, strlen(ch))<<endl; } }
#include<iostream> using namespace std; int sumNumber(int num) { int count=0; while(num) { count+=num%10; num=num/10; } return count; } int getDigitalRoot(int number) { if(number<10 && number>0) return number; int num=number; while(num>=10) { num=sumNumber(num); } return num; } int main() { int N; while(cin>>N) { if(N>0) cout<<getDigitalRoot(N)<<endl; } return 0; }
#include <stdio.h> int digit_root(int n) { int root = 0; while (n) { root += n % 10; n /= 10; } if (root > 9) { return digit_root(root); } else { return root; } } int main() { int n = 0; while (scanf("%d", &n) != EOF) { printf("%d\n", digit_root(n)); } return 0; }简单的递归
#include<iostream> using namespace std; typedef long long ll; ll root(ll n) { ll a=0,tmp=0; while(n>0) { a = n%10; tmp += a; n/=10; } return tmp; } int main() { ll n; while(cin>>n) { if(n==0) break; ll res = n; while(res>=10) { res = root(res); } cout<<res<<endl; } return 0; }
#include <iostream> using namespace std; int digital_root(int n) { //当n大于9时,循环计算 while (n > 9) { //新的n int new_n = 0; //计算n的各个位数之和 while (n > 0) { new_n += n % 10; n /= 10; } //更新n n = new_n; } //返回n return n; } int main() { int num; //循环读入整数 while (cin >> num) { //输出整数的数字根 cout << digital_root(num) << endl; } return 0; }
#include <iostream> using namespace std; int single_digit(int num){ int digit = 0; while(num>0){ int remain = num%10; num /= 10; digit += remain; } if(digit >= 0 && digit <= 9){ return digit; }else { return single_digit(digit); } } int main(){ int n; while (cin >> n){ cout << single_digit(n) << endl; } }