鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 高山

[技术交流] C++算法:每位数的提取【回复可见、抢楼】

 关闭 [复制链接]
抢楼 抢楼 查看抢中楼层 本帖为抢楼帖,欢迎抢楼!  截止楼层:10000  奖励楼层: 11,22,33,66,77,88,99,111,222,333,555,666,777,888,999,1111,2222,3333,*,*,*,*,*,*,*,*,*,*,*,*,*,* 
发表于 2022-9-19 20:57:00 | 显示全部楼层
本帖最后由 cnkizy 于 2022-9-19 20:59 编辑

微信截图_20220919205511.png
微信截图_20220919205614.png
#include <stdio.h>
// num 表示需要计算的数           [ebp + 8]
// buff 表示取出的数字存放的数组  [ebp + 12]
// len 表示数组长度               [ebp + 16]
void _stdcall fun_asm(unsigned int num, char* buff, int* len) {
    __asm {
        push 10    // 创建一个局部变量,10,作为除数,地址为[esp]
        mov ecx, [num]
        loop_start :
        cmp ecx, 0
        jz loop_over  // 被除数为0停止
        // 计算
        mov eax,ecx
        cdq
        idiv dword ptr[esp] // 32位/32位,除法结果: eax存放商,edx存放余, 这样一个指令就完成了俩值计算
        mov ecx, eax  // 商给ecx
        mov ebx, [buff]   // edx余数给buff
        mov dword ptr[ebx], edx  
        inc buff     // buff地址往后+1
        mov ebx, [len]   // len+1
        inc[ebx]      
        jmp loop_start // 返回继续计算,直到被除数为0停止
        loop_over :
        add esp, 4  // 平衡栈,之前创建了局部变量,现在不用了需要扔掉
    }
}

int main() {
    char* arry = new char[10] {0}; // 只有10个数字
    int len = 0; // 实际使用了多少数字
    int num = 0; // 输入的数字
    while (true) {
        printf("请输入被计算的数字:");
        scanf_s("%d", &num);
        if (num == 0) break;
        fun_asm(num, arry, &len);
        for (int i = len - 1; i >= 0; i--) {
            printf("%d ", *(arry + i));
        }
        printf("\n");
        len = 0;
    }
    delete[] arry;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-19 20:59:41 | 显示全部楼层
抢到了22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-19 22:04:33 | 显示全部楼层
#include <bits/stdc++.h>
using namespace std;

string num;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    cin >> num;

    for(auto number : num){
        cout << number << " ";
    }
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-19 22:11:40 | 显示全部楼层
sshot-1.png
做成了一个任意7位数以内,取得各位数单的类型版本,需要输出哪一位,就可以输出哪一位: a.out(4);//要第4位数子.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-19 22:18:07 | 显示全部楼层

fun_asm中是用了mov?
汇编手段吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-20 06:58:43 From FishC Mobile | 显示全部楼层
柿子饼同学 发表于 2022-9-19 22:04

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-20 07:50:41 | 显示全部楼层
howzyao 发表于 2022-9-19 22:18
fun_asm中是用了mov?
汇编手段吗?

是的,混合编程挺好玩,坑挺多的,跟着小甲鱼学汇编,来玩呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 21:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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