ACM基础题 这题咋做 求完整代码(我写的有错误)

img

#include <string.h>
int main(){
int n,ls,la,i;
char str1[] = "ss";
char str2[] = "rd";
char str3[] = "nd";
char str4[] = "st";
char str[100] ;
while(scanf("%d",&n)!=EOF){
if(n<100){
ls=strlen(str);
la=strlen(str1);
for(i=0;i<la;i++){
str[ls+i]=str1[i];}
}else{
ls=strlen(str);
la=strlen(str2);
for(i=0;i<la;i++){
str[ls+i]=str2[i];}
n=n%100;
if((n/10==1||n/10==5||n/10==9)&&n>9){
ls=strlen(str);
la=strlen(str3);
for(i=0;i<la;i++){
str[ls+i]=str3[i];}
}else{
ls=strlen(str);
la=strlen(str1);
for(i=0;i<la;i++){
str[ls+i]=str1[i];}
n=n%10;
}
if(n==3||n==7||n==2){
ls=strlen(str);
la=strlen(str4);
for(i=0;i<la;i++){
str[ls+i]=str4[i];}
}else{
ls=strlen(str);
la=strlen(str1);
for(i=0;i<la;i++){
str[ls+i]=str1[i];}
}
printf("%d",n);
for(i=0;i<ls+la;i++){
printf("%c",str[i]);}
}
return 0;
}

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string num;
    while(cin>>num)
    {
        int t=num.size();
        if(t==3) num+="rd";
        else num+="ss";
        if(num[t-2]=='1' || num[t-2]=='5' ||num[t-2]=='9') num+="nd";
        else num+="ss";
        if(num[t-1]=='3' || num[t-1]=='7' ||num[t-1]=='2') num+="st";
        else num+="ss";
        cout<<num<<endl;
    }
    return 0;
}

img

当数字小于100,没有考虑10以内数字
存储到数组没必要,可以直接输出,省下内存空间

int main(){
    int n,ls,la,i,j,tmp;
    char str1[] = "ss";
    char str2[] = "rd";
    char str3[] = "nd";
    char str4[] = "st";
    while(scanf("%d",&n)!=EOF){  
      printf("%d",n);
      tmp = n;
      tmp=n%1000/100;
      //获取百位
      if(tmp>0){//百位
       printf("%s",str2);
      }else{//最高可能十位
        printf("%s",str1);
      }      
    //获取十位
        tmp=n%100/10;
        //获取百位
        if(tmp==1||tmp==5||tmp==9){//十位
            printf("%s",str3);
        }else{
            printf("%s",str1);
        }    
    //获取个位
        tmp=n%10;
        if(tmp==3||tmp==7||tmp==2){//个位
           printf("%s",str4);
        }else{
            printf("%s",str1);
        }    
        printf("\n");
    }
    system("pause");
}

img