NBUT1461 数字整除(大数处理赏罚,减法、除法)
发布时间:2021-05-14 19:49:52 所属栏目:大数据 来源:网络整理
导读:数字整除 Description 定理: 把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。 譬喻,34是17的倍数,由于3-20=-17是17的倍数;201不是17的倍数,由于20-5=15不是17的倍数。输入一个正整
数字整除 Description 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。 譬喻,34是17的倍数,由于3-20=-17是17的倍数;201不是17的倍数,由于20-5=15不是17的倍数。输入一个正整数n,你的使命是判定它是否是17的倍数。 Input 输入文件最多包括10组测试数据,每个数据占一行,仅包括一个正整数n(1<=n<=10^100),暗示待判定的正整数。n=0暗示输入竣事,你的措施不应当处理赏罚这一行。?Output 对付每组测试数据,输出一行,暗示响应的n是否是17的倍数。1暗示是,0暗示否。Sample Input 34201209876541317171717171717171717171717171717171717171717171717180 Sample Output 1010 Hint 无 这道题被标题误导了,上来就按照标题给的要领举办计较了,事后回过甚看看这道题,着实,直接就用代码中的除法部门直接计较对 17 取余就行,那些减去什么的都是没用的。 附上代码(按照题意的代码,读者可以本身按照中间的除法部门直接对 17 取余): #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> using namespace std; string str; void sovle() { int j = 0; int num1[110]; int sum = str[str.length() - 1] - '0'; for(int i = str.length() - 2;i >= 0;i--) { num1[j++] = str[i] - '0'; } while(num1[0] <= sum * 5) // 减法部门 { int t = 1; while(num1[t] == 0) { num1[t++] = 9; } num1[t] -= 1; num1[0] += 10; } num1[0] -= sum * 5; int sum1 = num1[j - 1]; // 除法部门,对 17 取余部门 j = j - 2; while(j >= 0) { sum1 = sum1 * 10 + num1[j--]; sum1 %= 17; } if(sum1 == 0) cout << 1 << endl; else cout << 0 << endl; } int main() { while(cin >> str) { if(str.length() == 1 && str[0] == '0') break; int ans = 0; for(int i = 0;i < str.length();i++) { ans = ans * 10 + (str[i] - '0'); if(ans > 1000000) { break; } } if(ans <= 1000000) { int num = ans; int sum = num % 10; num /= 10; num -= sum * 5; if(num % 17 == 0) cout << 1 << endl; else cout << 0 << endl; } else sovle(); str.clear(); } return 0; } (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |