| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 752 人关注过本帖
标题:想了想 决定还是发在 c 版,毕竟是 c 内联汇编语法为主 题目是 已知的 5 ...
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:1 
想了想 决定还是发在 c 版,毕竟是 c 内联汇编语法为主 题目是 已知的 5 位正整数
求满足 abcde=a^5+b^5+c^5+d^5+e^5  这样的5位数都有谁?
答案是
54748
92727
93084

下面主要是用vs2010+c+内联汇编 编写   有不足之处还请各位大虾指点

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

int mypow(int x,int n)
{
    int t;
    _asm
    {
        mov eax,1;
        mov ecx,n;
     lp:
        imul eax,x;
        sub ecx,1;
        cmp ecx,0;
        jle ex;
        jmp lp;
     ex:
        mov t,eax;
    }
    return t;
}

void split(int s,int* a1,int* a2,int* a3,int* a4,int* a5)
{
    _asm
    {
        mov eax,dword ptr [s];
        cdq;
        mov ecx,10;
        idiv ecx;
        mov dword ptr [s],eax;
        mov eax,dword ptr a5;
        mov dword ptr [eax],edx;
        //
        mov eax,dword ptr [s];
        cdq;
        mov ecx,10;
        idiv ecx;
        mov dword ptr [s],eax;
        mov eax,dword ptr a4;
        mov dword ptr [eax],edx;
        //
        mov eax,dword ptr [s];
        cdq;
        mov ecx,10;
        idiv ecx;
        mov dword ptr [s],eax;
        mov eax,dword ptr a3;
        mov dword ptr [eax],edx;
        //
        mov eax,dword ptr [s];
        cdq;
        mov ecx,10;
        idiv ecx;
        mov dword ptr [s],eax;
        mov eax,dword ptr a2;
        mov dword ptr [eax],edx;
        //
        mov eax,dword ptr [s];
        cdq;
        mov ecx,10;
        idiv ecx;
        mov dword ptr [s],eax;
        mov eax,dword ptr a1;
        mov dword ptr [eax],edx;
    }
}

int main()
{
    int s,a1,a2,a3,a4,a5;
    int t;
    char* fmt="%5d\n";
    _asm
    {
        mov eax,10000;
beg:
        mov dword ptr [t],eax;   // t 用来保存循环变量
        cmp eax,99999;
        jg end;  //大于则跳转至循环结束
        //以上循环头
        mov s,eax;
        lea ecx,dword ptr [a5];
        push ecx;
        lea ecx,dword ptr [a4];
        push ecx;
        lea ecx,dword ptr [a3];
        push ecx;
        lea ecx,dword ptr [a2];
        push ecx;
        lea ecx,dword ptr [a1];
        push ecx;
        mov ecx,dword ptr [s];
        push ecx;
        call split;    //对五位数进行分割
        add esp,24;
        //
        xor esi,esi;
        push 5;
        mov ecx,dword ptr [a5];
        push ecx;
        call mypow;
        add esi,eax;    //调用幂函数并对结果进行累加
        add esp,8;     

        push 5;
        mov ecx,dword ptr [a4];
        push ecx;
        call mypow;
        add esi,eax;    //调用幂函数并对结果进行累加
        add esp,8;

        push 5;
        mov ecx,dword ptr [a3];
        push ecx;
        call mypow;
        add esi,eax;    //调用幂函数并对结果进行累加
        add esp,8;

        push 5;
        mov ecx,dword ptr [a2];
        push ecx;
        call mypow;     //调用幂函数并对结果进行累加
        add esi,eax;
        add esp,8;

        push 5;
        mov ecx,dword ptr [a1];
        push ecx;
        call mypow;
        add esi,eax;     //调用幂函数并对结果进行累加
        add esp,8;
    
        cmp esi,dword ptr [t];
        jnz exit0;  //不相等则跳至下一次循环

        //如果相等则打印输出
        mov ecx,dword ptr [t];
        push ecx;
        mov ecx,dword ptr fmt;
        push ecx;
        call dword ptr printf;
        add esp,8;
        
exit0:
        mov eax,dword ptr [t];  //进行下一次循环
        add eax,1;
        jmp beg;

end:
    }
    return 0;
}
搜索更多相关主题的帖子: 正整数 color 
2014-12-08 11:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 9楼 longwu9t
是的   pow函数比较短小   还是自己写的好

DO IT YOURSELF !
2014-12-08 18:52
快速回复:想了想 决定还是发在 c 版,毕竟是 c 内联汇编语法为主 题目是 已知 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056950 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved