hsk


私信TA

用户名:dotcpp0644469

访问量:3095

签 名:

有志者,事竟成

等  级
排  名 2721
经  验 2177
参赛次数 0
文章发表 23
年  龄 0
在职情况 学生
学  校 河南科技大学
专  业 新一代电子信息技术

  自我简介:

TA的其他文章

解题思路:

如果按照问题中给出的解题思路进行解题,个人水平有限,只能写出满足一半例程的程序,另外的一半例程可能是由于数据太大了,使用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 人评分

  评论区

  • «
  • »