注册 登录
编程论坛 C语言论坛

想用字符串的方法解决,求教。输出出现问题。

魂之子 发布于 2020-01-14 23:05, 1687 次点击
问题描述:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。


#include<stdio.h>


void swap(char *pa,char * pb);
int main(){
    int i;
        char a[4];
    scanf("%s",a);

    int con;
    for (con=0; con<4; con++){
         a[con] += 9;
         a[con] /= 10;
    }
    swap (&a[0], &a[2]);
    swap (&a[1], &a[3]);
    printf ("The encrypted number is %s",a);
   
    return 0;
}

void swap(char *pa,char * pb){
    int i;
    i = *pb;
    *pb = *pa;
    *pa = i;
}
2 回复
#2
rjsp2020-01-15 08:44
错误有三处
1. char a[4] 应该是  char a[5] 吧
2. a[con] /= 10 应该是 a[con] %= 10 吧
3. 你用 scanf("%s",a) 获得的不是 0、1、2、……,而是 '0'、'1'、'2'、……。所以你那个循环体应当是 a[con] = (a[con]-'0'+9)%10 + '0';

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    unsigned m = (n/10+9)%10*1000 + (n/1+9)%10*100 + (n/1000+9)%10*10 + (n/100+9)%10*1;
    printf( "%u\n", m );
}



#3
魂之子2020-01-15 21:38
回复 2楼 rjsp
非常感谢大哥帮我解决问题,恍然大悟,非常感谢。
1