VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1146|回复: 7

小弟无能 跪求各位大虾指点 (附我学的是C++)

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-10 09:40:01 | 显示全部楼层 |阅读模式
数字加密:
要求。加密 0~9.设0.1.2.3.4.5.6.7.8.9对应的密码为9.0.8.2.7.4.6.3.1.5.键盘输入一个四位数。要求马上输出其对应的密码。如:输入4925.则输出:7584
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-13 19:18:02 | 显示全部楼层
这跟汇编没什么关系吧 很简单 几分钟写的 没考虑效率 输入为四位(不足四位 高位补9)
int main(int argc, char* argv[])
{//0.1.2.3.4.5.6.7.8.9对应的密码为9.0.8.2.7.4.6.3.1.5
    int aa,n[4],num;

    cin>>aa;
    n[0]=aa%10;
    n[1]=aa/10%10;
    n[2]=aa/100%10;
    n[3]=aa/1000;

for(int i=0;i<=3;i++)
  {
    num=n[i];
    switch(num)
    {
     case 0:n[i]=9;break;
     case 1:n[i]=0;break;
     case 2:n[i]=8;break;
     case 3:n[i]=2;break;
     case 4:n[i]=7;break;
     case 5:n[i]=4;break;
     case 6:n[i]=6;break;
     case 7:n[i]=9;break;
     case 8:n[i]=1;break;
     case 9:n[i]=5;break;
     default: cout<<"错误";
    }
  }
  aa=n[0]+10*n[1]+100*n[2]+1000*n[3];
  cout<<"密码为:";
  cout<<aa;
   return 0;
}
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-14 20:54:01 | 显示全部楼层
要求用 汇编语言 若用C语言我也能写
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-1-15 20:27:01 | 显示全部楼层
简单的办法是用一个影射表,一次影射一遍即可。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-16 13:54:01 | 显示全部楼层
最简单的方法:
写一个实现改功能的函数,然后F5运行,函数入口处设断点,然后ALT+8,把编译器生成的汇编copy出来就OK了
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-17 11:18:01 | 显示全部楼层
按您的要求 又写拉一遍 应该没问题  
data segment use16
buf db 10
         db ?
         db 10 dup(?),'$'
         
tab  dw t0
        dw t1
dw t2
dw t3
dw t4
dw t5
dw t6
dw t7
dw t8
dw t9
data ends
code segment use16
           assume cs:code,ds:data
beg:mov ax,data
         mov ds,ax
         mov ah,0Ah
         mov dx,offset buf
         int 21h
        lea bx,buf+1
mov cx,4
push bx
loo:pop bx
        inc bx
        sub byte ptr[bx],30h
         push bx
      mov bl ,byte ptr[bx]
        mov bh,0
       add bx,bx
       mov si,offset tab
     dec cx
     cmp cx,0
     je looo
       jmp [bx+si]
looo: mov dx,offset buf+2
           mov ah,09h
          int 21h

;0.1.2.3.4.5.6.7.8.9对应的密码为9.0.8.2.7.4.6.3.1.5
t0: mov byte ptr[bx],39h
       jmp loo
t1: mov byte ptr[bx],30h
jmp loo
t2: mov byte ptr[bx],38h
jmp loo
t3: mov byte ptr[bx],32h
jmp loo
t4: mov byte ptr[bx],37h
jmp loo
t5: mov byte ptr[bx],34h
jmp loo
t6: mov byte ptr[bx],36h
jmp loo
t7: mov byte ptr[bx],33h
jmp loo
t8: mov byte ptr[bx],31h
jmp loo
t9: mov byte ptr[bx],35h
jmp loo
code ends
            end beg      
        
回复

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-17 19:18:01 | 显示全部楼层
C版本的
int main(int argc, char* argv[])
{
        int sz[10]={9,0,8,2,7,4,6,3,1,5};
        char input[5]={0};
        scanf("%4s",input);
        printf("%d%d%d%d",sz[ input[0]-'0' ],sz[ input[1]-'0' ],sz[ input[2]-'0' ],sz[ input[3]-'0' ]);
        return 0;
}
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-15 16:00:01 | 显示全部楼层
实在是太感谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表