前言:这原本是个简单的问题,想求一个数的倒数,例如123的倒数就是321,但是在其中也遇到了很多问题,如vscode窗口闪退,打不开窗口,自己粗心大意没有加return,不清楚scanf的返回值
vscode窗口闪退
解决VS code 工具中C++运行黑窗口一闪而退的问题 - wancy - 博客园 (cnblogs.com)
我参考了这篇文章 ,对launch.json文件进行了修改,修改部分如图下黑框,应该是用cmd命令窗口打开这个执行文件,具体我也不懂
打不开窗口
vscode运行时没有黑窗口问题_vscode怎么调出黑窗口-CSDN博客
跟刚才差不多的位置
粗心大意不加return
我搞了个用户自定义代码片段,以后写函数就这个形式
vsCode设置用户代码片段_vscode用户代码片段设置-CSDN博客
"function_return": {
"prefix": "f_return",
"body": [
"uin8_t?$1 Function_Name(void?$2)",
"{",
"\tuin8_t return_value=0;",
"\t",
"\treturn what?$0;",
"}"
],
"description": "有返回值的函数"
}
不清楚scanf的返回
简单来说scanf会返回匹配成功的项数,例如scanf("%d %d",&a,&b);如果我输入0,a,则返回1,输入0,1,则返回2,输入失败返回EOF,具体我也不是很清楚,因为用的不多
数的“倒数”的代码
方式1
不断的取余取整,然后每一次过程对结果乘以10,注意这里result初始化为0
uint16_t Reciprocal_1(uint16_t Count)
{
unsigned char remainder=0;
uint16_t result=0;
while (1)
{
remainder=Count%10;
result=result*10+remainder;
Count=Count/10;
if (Count==0)
{
break;
}
}
return result;
}
方式2
也不知道是不是我弄复杂了,思路跟上面的差不都,也是取余取整,但是上面是每次乘以10,这个是从最大位数-1的10次方开始乘起,然后依次递减,但是我觉得这个方案教会我一个数的位数也是有意义的
/*效果就是算出x的y次方*/
uint16_t get_pow(uint8_t x,uint8_t y)
{
uint16_t result=1;
for (uint8_t i = 0; i < y; i++)
{
result*=x;
}
return result;
}
/*返回位数*/
uint8_t get_length(uint16_t count)
{
uint8_t i;
for (i = 0; count != 0; i++)
{
count/=10;
}
return i;
}
uint16_t Reciprocal_2(uint16_t Count,uint8_t Length)
{
unsigned char remainder=0;
uint16_t result=0;
for (uint8_t i = Length; i > 0 ; i--)
{
remainder=Count%10;
result += remainder*get_pow(10,i-1);
Count /= 10;
}
return result;
}