查找数字的数字根
Find digital roots of a number
这是一个ACM问题,以找到整数的根。这是问题文字:http://acm.zju.edu.cn/onlinejudge/showproblem.do?problemid=115
这是我的代码,但是当我提交代码时,我会得到错误的答案。另一方面,我已经使用整数数字检查了此代码,并且我得到了正确的答案。
#include <iostream>
using namespace std;
int main() {
unsigned long long cc = 0;
cin >> cc;
while (cc != 0) {
unsigned long long sum = 0;
while (cc > 0) {
sum += cc % 10;
cc = cc / 10;
if (cc == 0 && sum > 9) { cc = sum; sum = 0; }
}
cout << sum;
cin >> cc;
cout << endl;
}
}
你能帮我吗?谢谢。
问题是输入整数大于适合无签名长的长度。
因此,您需要将数字读为字符串,然后从字符串中计算数字总和。
以下代码将起作用:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string inStr;
while(cin >> inStr && inStr != "0")
{
unsigned long long cc = 0;
for(string::const_iterator it = inStr.begin(); it!=inStr.end(); ++it)
{
cc += *it - '0';
}
unsigned long long sum = 0;
do
{
while (cc)
{
sum += cc % 10;
cc = cc / 10;
}
cc = sum;
sum = 0;
}while(cc > 9);
cout << cc << endl;
}
return 0;
}
我想知道为什么有人还没有发布此信息...:P该功能返回答案:)
int Digital_root(int a) {
return a%9==0 ? 9:a%9;
}
可能问题在于该数字可能包含2位以上的数字,在这种情况下,这种修改是必要的:
int main() {
unsigned long long cc = 0;
cin >> cc;
unsigned long long sum = 0;
while (cc > 0) {
sum += cc % 10;
cc = cc / 10;
if ( sum > 9) { cc = sum; sum = 0; }
^
// cc == 0 will fail
}
cout << sum;
}
它不是完美的代码,但可以工作
int a = 0;
int b = 0;
while (true)
{
cout << endl << "a: ";
cin >> a;
if (!a) break;
do
{
while (a)
{
b += a%10;
a /= 10;
}
a = b;
b = 0;
}
while (a > 9);
cout << endl<< "root: " << a;
任务确实要求以9.
的方式要求其余部分。原因:由于10 mod 9 == 1
及其10^k mod 9 == 1
,因此十进制数字的总和与数字本身的剩余剩余相同。重复的数字总和不会更改其余部分,因此某些n
的十进制数字根与n mod 9
相同或计算n
Modulo的数字总和9。
将Riklund的代码减少到此基本任务给出
#include <iostream>
#include <string>
using namespace std;
int main() {
string inStr;
while(cin >> inStr && inStr != "0") {
unsigned int cc = 0; // need only 5 bit for cc in this computation
for(string::const_iterator it = inStr.begin(); it!=inStr.end(); ++it) {
cc += *it - '0';
cc %=9;
}
cout << cc << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; ; i++)
{
unsigned long int x,sum=0;
cin >> x;
if (x == 0)
break;
if (x <= 9)
{
sum = x;
goto z;
}
while (x > 9)
{
while (x != 0)
{
sum = sum + (x%10);
x = x / 10;
}
if (sum > 9)
{
x = sum;
sum = 0;
}
}
z:
cout << sum <<"n";
}
}
//digital roots.cpp~KAUSHIK
#include<iostream>
using namespace std;
int sum(int n)
{
int sum=0,r;
for (;n>0;)
{
r=n%10;
sum=sum+r;
n=n/10;
}
return sum;
}
int main()
{
int n;
cout<<"enter any number"<<endl;
cin>>n;
int a=n;
n=sum(n);
if((n/10)!=0)
{
n=sum(n);
cout<<"the digital root of "<<a<<" is"<<n;
}
else cout<<"the digital root of "<<a<<" is"<<n;
return 0;
}
它适用于小整数
#include <iostream>
using namespace std;
int main()
{
unsigned long long input;
while (true)
{
cin >> input;
if (input == 0) break;
input = input - (9 * ((input - 1) / 9));
cout << input << endl;
}
return 0;
}
它的工作简单副本,在main()中,对我的英语感到抱歉。
int a = 39;
int b = 0;
do
{
while (a)
{
b += a%10;
a /= 10;
}
a = b;
b = 0;
}
while (a > 9);
相关文章:
- 查找最接近的大于当前数字的数字的索引
- 在 c++ 中查找字符串中没有循环的数字总和
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 在C++的一系列数字中查找重复模式
- 为什么使用数组元素查找最大数字的程序不起作用?
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 查找数字是否为 2 的幂的时间复杂度
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 使用 XOR 逻辑查找缺失的数字
- 查找中间两个数字的正则表达式的匹配项
- 查找数组中的最小数字
- 查找数组中重复(重复)数字的索引
- 程序 查找数字的重复
- 如何查找数字大于 5 的数字总和
- 查找数组中给定数字的出现次数
- 在 C++ 中查找 2 个数字的 GCD
- 代码以查找数组中的最大数字,但它仅将第一个数字显示为最大数字. 有人请告诉我为什么
- 如何制作一个查找数字平方值的 c++ 程序
- 查找整数数组中最接近的数字
- C ++递归与大数字查找mod