字符串处理
可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。 合法的IP地址为: a、b、c、d都是0-255的整数。
#includeusing namespace std; int main(){ int point_pos[5]; point_pos[0]=-1; string s; while(cin>>s){ int a=1;//记录点位置 bool flag=true; for(int i=0;i ){ if(s[i]=='.'&&a==4){ flag=false; break; } if(s[i]=='.'){ point_pos[a++]=i; } } if(a!=4){ flag=false; } point_pos[5]=s.size(); if(flag){ int num; string temp; for(int i=0;i<4;i++){ num=atoi((s.substr(point_pos[i]+1,point_pos[i+1])).c_str());//取子串用substr(a,b)b是结尾符后一位 atoi将字符串转变为整数 //cout< if(num<0||num>255){ flag=false; break; } } } if(flag){ cout<<"Yes!"<<endl; } else cout<<"No!"<<endl; } return 0; }
输入包括两个数a和b,其中a和b的位数不超过1000位。
大整数处理
用字符串:
#includeusing namespace std; void rev(char str1[],char str2[]){ for(int i=0,j=strlen(str1)-1;j>=0;j--,i++){ str2[i]=str1[j]; } } int lena,lenb; char s1[1100],s2[1100],res[1100],a[1100],b[1100]; int add(char str1[],char str2[]){ int carry=0,sum,temp; int i; for(i=0;i ){ temp=str1[i]+str2[i]-'0'-'0'; sum=(temp+carry)%10; carry=(temp+carry)/10; res[i]=sum+'0'; } if(carry){ res[i]=1; i++; } return i-1; } int main(){ while(scanf("%s %s",&s1,&s2)!=EOF){ memset(a,'0',1100*sizeof(char)); memset(b,'0',1100*sizeof(char)); lena=strlen(s1); lenb=strlen(s2); rev(s1,a); //puts(a); rev(s2,b); //puts(b); int reslen=add(a,b); for(int i=reslen;i>=0;i--){ putchar(res[i]); } putchar('\n'); } return 0; }
用int:
#includeusing namespace std; int res[1002]; int lena,lenb,lenres; string str1,str2; void rev(string str,int num[]){ for(int i=0,j=str.size()-1;j>=0;j--,i++){ num[i]=str[j]-'0'; } } int add(int a[],int b[]){ int carry=0,temp,i;//进位不初始化0会出错 for(i=0;i ){ temp=a[i]+b[i]+carry; res[i]=temp%10; carry=temp/10; } //cout< if(carry){ res[i]=1; i++; } lenres=i-1; } int main(){ while(cin>>str1){ cin>>str2; lena=str1.size(); lenb=str2.size(); int a[1001]={0},b[1001]={0};//数组不初始化0也出错 rev(str1,a); rev(str2,b); add(a,b); for(int i=lenres;i>=0;i--){ printf("%d",res[i]); } printf("\n"); } return 0; }