原题链接:数字整除
解题思路:
如果按照问题中给出的解题思路进行解题,个人水平有限,只能写出满足一半例程的程序,另外的一半例程可能是由于数据太大了,使用stoi()函数与stringstream均无法正确地将字符串转换到整数类型,也就无法接下来的取余操作,所以就根据题解区的提示,采用大数取余的方式来解决问题。
大数取余核心代码:
//大叔取余!!---直接求得最后的结果
int len = strlen(a);
long long result = 0;
for(int i=0;i<len;++i){
result = (result*10 + (int)(a[i]-'0'))%xx;
//cout<<"第"<<i<<"次:"<<result<<endl;
}
注意事项:
大数取余的核心就是边读取字符串边处理,这样以至于数据不太太大,等到整个字符串数据处理完时,就得到了最后的结果
参考代码:
按照问题提示的解题代码(只能通过一半的测试案例)
//不能全对版本 整数取余
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
using namespace std;
char a[10001];
int main()
{
//while(cin.getline(a,10001) != NULL)
while(gets(a) != NULL)
{
if(a[0] == '0')
{
break;
}
//开始处理
long long int ss = 0;
//将每一位转化为数字
int len = strlen(a);
// stringstream sss;
// sss<<a;
// sss>>ss;
// cout<<ss<<endl;
for(int i=0;i<=len-2;++i) //去除最后一位
{
ss = ss*10 + (int)(a[i]-'0');
//cout<<"ss: "<<ss<<endl;
}
//对ss进行操作
ss -= (a[len-1]-'0')*5;
//cout<<ss<<endl;
//ss=1717171717171717171717171717171717171717171717171718;
while(ss %= 17)
{
}
if(ss != 0)
{
cout<<"0"<<endl;
break;
}
if(ss == 0)
{
cout<<"1"<<endl;
}
}
return 0;
}按照大数取余的思路的解题代码:
//整数取余
#include <bits/stdc++.h>
using namespace std;
const int maxx=120;
char a[maxx];
int main(){
int xx=17;
while(gets(a) != NULL)
{
if(a[0] == '0')
{
break;
}
//大叔取余!!---直接求得最后的结果
int len = strlen(a);
long long result = 0;
for(int i=0;i<len;++i){
result = (result*10 + (int)(a[i]-'0'))%xx;
//cout<<"第"<<i<<"次:"<<result<<endl;
}
if(result ==0)
{
cout<<"1"<<endl;
}
else if(result != 0)
{
cout<<"0"<<endl;
}
}
return 0;
}希望大家越变越强!
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复