lovesukie 发表于 2018-11-25 12:55:41

oj显示答案错误,检查了半天没发现错误

问题描述:
某个公司想用电话来传送数据,但又担心被人窃听。数据都是由四位数字组成的整数。为了使数据传送更加安全一些,公司要你编写一个加密数据和解密数据的程序。程序读取一个四位整数,然后按如下规则加密:每位数字都加上7,然后用和除以10的余数取代该数字;再把第1位与第3位交换,第2位与第4位交换。说明:将最高位视作第1位。如整数1234,则第1位是1,第4位是4。

输入与输出要求:
输入两个整数n和f,n代表待加密或解密的整数(0000<=n<=9999),f为标志整数,当f为1时代表将整数n加密,当f为0时代表将整数n解密。输出加密数字或解密数字,加密结果输出为“After encrypting the number is XXXX”, 解密结果输出为“After decrypting the number is XXXX”。

程序运行效果:
Sample 1:
1890 1↙
After encrypting the number is 6785↙
Sample 2:
6785 0↙
After decrypting the number is 1890↙


代码如下:


#include<stdio.h>
#include<string.h>
int main()
{
        int i,j;
        scanf("%d %d",&i,&j);
        //printf("%d,%d",i,j);
        int temp=0;
        int a,b,c,d;
        if(j==1)
        {
                a=i/1000;
               b=i/100-a*10;
               c=i/10-b*10-a*100;
               d=i-a*1000-b*100-c*10;
              
                a=a+7;
                b=b+7;
                c=c+7;
                d=d+7;
                a=a%10;
                b=b%10;
                c=c%10;
                d=d%10;
                temp=a;
                a=c;
                c=temp;
                temp=b;
                b=d;
                d=temp;
                i=a*1000+b*100+c*10+d;
                if(a==0)
                {
                        printf("After encrypting the number is 0%d",i);
                }
                else{
               
                printf("After encrypting the number is %d",i);
       }
       }
       if(j==0)
       {
               a=i/1000;
               b=i/100-a*10;
               c=i/10-b*10-a*100;
               d=i-a*1000-b*100-c*10;
              
              
               temp=a;
               a=c;
               c=temp;
               temp=b;
               b=d;
               d=temp;
              
               a=((a==7||a==8||a==9))?a-7:(a+3);
               b=((b==7||b==8||b==9))?b-7:(b+3);
               c=((c==7||c==8||c==9))?c-7:(c+3);
               d=((d==7||d==8||d==9))?d-7:(d+3);
               //printf("%d,%d,%d,%d",a,b,c,d);
               i=a*1000+b*100+c*10+d;
               printf("After decrypting the number is %d",i);
       }
       return 0;
}

lovesukie 发表于 2018-11-25 16:09:43

求助

lovesukie 发表于 2018-11-25 20:21:06

救命啊

lovesukie 发表于 2018-12-6 22:10:50

求助

人造人 发表于 2018-12-7 13:05:21

lovesukie 发表于 2018-12-6 22:10
求助

#include <iostream>
#include <string>

const std::string Encrypting(const std::string &s_num)
{
        std::string result;
        for(const auto &i: s_num)
        {
                size_t num = i - '0';
                result += ((num + 7) % 10) + '0';
        }

        std::swap(result, result);
        std::swap(result, result);
        return result;
}

const std::string Decrypting(const std::string &s_num)
{
        std::string result;
        for(const auto &i : s_num)
        {
                size_t num = i - '0';
                if(num >= 7)
                        result += (char(num) - 7) + '0';
                else
                        result += (char(num) + 10 - 7) + '0';
        }

        std::swap(result, result);
        std::swap(result, result);
        return result;
}

int main()
{
        std::string code;
        bool flag;
        std::cin >> code >> flag;

        if(flag)
        {
                std::cout << "After encrypting the number is " << Encrypting(code) << std::endl;
        }
        else
        {
                std::cout << "After decrypting the number is " << Decrypting(code) << std::endl;
        }

        return 0;
}

人造人 发表于 2018-12-7 13:06:20

1890 1
After encrypting the number is 6785
请按任意键继续. . .

6785 0
After decrypting the number is 1890
请按任意键继续. . .

lovesukie 发表于 2018-12-17 16:36:35

人造人 发表于 2018-12-7 13:06


可是我还是没有发现我哪里错误了
emm

人造人 发表于 2018-12-17 21:35:39

lovesukie 发表于 2018-12-17 16:36
可是我还是没有发现我哪里错误了
emm

要描述清楚问题,你的程序有问题吗?有什么问题?


页: [1]
查看完整版本: oj显示答案错误,检查了半天没发现错误