1175:除以13
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 17767 通过数: 10455
【题目描述】
输入一个大于0的大整数N,长度不超过100位,要求输出其除以13得到的商和余数。
【输入】
一个大于0的大整数,长度不超过100位。
【输出】
两行,分别为整数除法得到的商和余数。
【输入样例】
2132104848488485
【输出样例】
164008065268345
0
第一种:数大,用字符,比较繁琐,凑合着看吧,呵呵……
#include<iostream> #include<cmath> #include<cstring> char a[305],b[305],c[3005],sum[305]; int dashuchu(char p[],char q[],int n,int i) { int x,y=0,k; do { for(x=n-1;x>=0;x--) { if(a[x]<b[x]){ a[x-1]--; a[x]+=10; } a[x]=a[x]-b[x]+'0'; } y++; }while(strcmp(a,b)>0||strcmp(a,b)==0); for(x=0,k=i;x<n;x++,k++) c[k]=a[x]; return y; } using namespace std; int main() { scanf("%s",c); int m,n,j,i,t; b[0]='1'; b[1]='3'; n=strlen(b); m=strlen(c); for(i=0;i<=m-n;i++) sum[i]='0'; for(i=0;i<=m-n;i++){ for(j=0,t=i;j<n;j++,t++)//°ÑcÖеÄn³¤¶ÈµÄÊý·ÅÔÚaÖÐ a[j]=c[t]; a[j]='\0'; if(strcmp(a,b)>=0)//±È½ÏaºÍbµÄ´óС sum[i]+=(char)dashuchu(a,b,n,i); { c[i+1]=(c[i]-'0')*10+c[i+1]; c[i]='\0'; }//Èç¹ûС,°ÑcÖеķÅÔÚaÖеĵÚÒ»¸öÊý*10¼ÓÔÚµÚ¶þ¸öÊýÉÏ¡£È»ºóÖظ´Ñ»· } i=0; while(sum[i]=='0')i++; for(;i<m-n+1;i++)//erase the zero. putchar(sum[i]); printf("\n"); i=0; while(a[i]=='0')i++; if(i==n) printf("0"); else for(;i<n;i++) putchar(a[i]); return 0;//second over. }
第二种:简练一些了,字符转换为整形
#include<iostream> #include<cmath> #include<cstring> using namespace std; int main() { int a[105]; char b[105]; int i,j,k,m=0; scanf("%s",b); k=strlen(b); for(i=0;i<k;i++) a[i]=b[i]-'0';//转换为数值 for(i=0;i<k;i++) { m=m*10+a[i];//从高位,开始时m=0 a[i]=m/13;//除13 m=m%13; if(!(a[i]==0&&(i==1||i==0))) //第一位或第二位是0时不输出,因10除13商是00 printf("%d",a[i]); } if((m<13)&&i<=2&&a[i-1]==0)//处理特殊情况:就是两位还小于13, //因为前面第一位和第二位是0时不输出所以,这是输出商0 printf("0"); printf("\n%d",m); }