求大家帮小弟我看看13整除的代码错哪了
求大家帮我看看13整除的代码哪里错了
给定一个正整数n,判定n能否被13整除。
输入数据的第一行是一个整数T,(T<20)。接着有T行,每行上有一个用字符串表示的正整数n(长度不超过80),对应一种情形。
对于每一种情形,如果n被13整除,那么输出“Yes”,否则输出“No”
Sample Input
2
91
1234567
Sample Output
Yes
No
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char a[1000];
int i,j,l,n;
scanf("%d",&n);
getchar();
while(n--)
{
char b[1000]={0},c[1000]={0};
double s;
gets(a);
l=strlen(a);
if(i<=3)
s=atoi(a);
else
{for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
c[j]=a[i];
c[i+1]='\0';
s=abs(atoi(b)-atoi(c));
}
if((int)s%13==0) printf("Yes\n");
else printf("No\n");
}
return 0;
}
我自己测试的长数组都是对的啊可是还是传到网上还是WA
------解决思路----------------------
------解决思路----------------------
for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
c[j]=a[i];
c[i+1]='\0';
首先i+1都改i。其次你l=80的时候l-3是77,这itoa不是一样会爆?
------解决思路----------------------
s=abs(atoi(b)-atoi(c)); 这里的b只比a短3位而已,a最长到80的情况下b同样也是超出了atoi的范围。
我随便写了一段,不知道对不对,我自己试了一些数好像还行:
128396511965064616 // Yes
128396511965064613 // No
16049382683950649382683945 // Yes
16049382683950649382683946 // No
------解决思路----------------------
数据这么大,必须用大数才行啊
------解决思路----------------------
可行,这题目就是要求用字符串操作来处理运算操作,不能转换成数字(会内存溢出的)来操作,
------解决思路----------------------
仅供参考
给定一个正整数n,判定n能否被13整除。
输入数据的第一行是一个整数T,(T<20)。接着有T行,每行上有一个用字符串表示的正整数n(长度不超过80),对应一种情形。
对于每一种情形,如果n被13整除,那么输出“Yes”,否则输出“No”
Sample Input
2
91
1234567
Sample Output
Yes
No
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char a[1000];
int i,j,l,n;
scanf("%d",&n);
getchar();
while(n--)
{
char b[1000]={0},c[1000]={0};
double s;
gets(a);
l=strlen(a);
if(i<=3)
s=atoi(a);
else
{for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
c[j]=a[i];
c[i+1]='\0';
s=abs(atoi(b)-atoi(c));
}
if((int)s%13==0) printf("Yes\n");
else printf("No\n");
}
return 0;
}
我自己测试的长数组都是对的啊可是还是传到网上还是WA
------解决思路----------------------
if(i/*这应该是l吧*/<=3)
------解决思路----------------------
for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
c[j]=a[i];
c[i+1]='\0';
首先i+1都改i。其次你l=80的时候l-3是77,这itoa不是一样会爆?
------解决思路----------------------
s=abs(atoi(b)-atoi(c)); 这里的b只比a短3位而已,a最长到80的情况下b同样也是超出了atoi的范围。
我随便写了一段,不知道对不对,我自己试了一些数好像还行:
128396511965064616 // Yes
128396511965064613 // No
16049382683950649382683945 // Yes
16049382683950649382683946 // No
#include<stdio.h>
int main()
{
char a[128];
int T, s;
char *p;
scanf("%d",&T);
while(T-- > 0)
{
s = 0;
scanf("%s", a);
for (p = a; *p != '\0'; p++)
{
s = (*p - '0' + s * 10) % 13;
}
if(s%13==0) printf("Yes\n");
else printf("No\n");
}
return 0;
}
------解决思路----------------------
数据这么大,必须用大数才行啊
------解决思路----------------------
可行,这题目就是要求用字符串操作来处理运算操作,不能转换成数字(会内存溢出的)来操作,
------解决思路----------------------
仅供参考
#include <iostream>
#include <string>
using namespace std;
inline int compare(string str1,string str2) {//相等返回0,大于返回1,小于返回-1
if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数
else if (str1.size()<str2.size()) return -1;
else return str1.compare(str2); //若长度相等,则头到尾按位比较
}
string SUB_INT(string str1,string str2);
string ADD_INT(string str1,string str2) {//高精度加法
int sign=1; //sign 为符号位
string str;
if (str1[0]=='-') {
if (str2[0]=='-') {