「题解」关于sizeof陷阱,无符号整形,变种水仙花数

这篇具有很好参考价值的文章主要介绍了「题解」关于sizeof陷阱,无符号整形,变种水仙花数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

sizeof陷阱以及无符号整形

让我们看一下这段代码:​​​​​​​

 int main(){
int x = -1;
unsigned int y = 2;
if (x > y){
printf("x is greater");
}
else{
    printf("y is greater");
}
return 0;
}

大家会认为结果是多少呢?结果会是"y is greater"?让我们看一下运行结果吧

int x=-1;unsigned int y=2;if(x>y),题解C,c语言,c++,算法

 为什么会出现这种结果呢,由于x是有符号数-1,内存中是全1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数,输出结果是x is greater

至于这个很大的数是偶少呢

int x=-1    原码:10000000000000000000000000000001
            反码:11111111111111111111111111111110
            补码:11111111111111111111111111111111
unsigned int x=-1    补码:11111111111111111111111111111111
没有符号则             原码等于补码:11111111111111111111111111111111
unsigned int y=2     原码:00000000000000000000000000000010
注意:此时x,y都是无符号数,二进制码的最高位不是符号位。
肉眼可见11111111111111111111111111111111>00000000000000000000000000000010
所以x>y

还有一道题异曲同工

#include <stdio.h>
int i;
int main(){
    i--;
    if (i > sizeof(i)){
        printf(">\n");
    }
    else{
        printf("<\n");
    }
    return 0;
}

C语言中,0为假,非0即为真。

全局变量,没有给初始值时,编译其会默认将其初始化为0。i的初始值为0,i--结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,所以输出‘>’

这道题其实很隐蔽,真是虾仁猪心!!! 

注:sizeof的返回值类型实际为无符号整形,如果有符号的整形数据与无符号整形的数据比较时,无符号整形的数据自动转换为无符号整形的数据

sizeof运行规则

一般表达式的运算是在运行时执行的,而sizeof是一个编译阶段就执行的运算符,在其内的任何运算都不执行。

#include <stdio.h>
int main()
{
int i = 1;
sizeof(i++);
printf("%d\n", i);
return 0;
}
一般表达式的运算是在运行时执行的,而sizeof是一个编译阶段就执行的运算符,在其内的任何运算都不执行
所以i++是不会计算的,++i同样也是不会计算的,所以i的值还是等于1

变种水仙花数

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。 

例如: 

655 = 6 * 55 + 65 * 5 

1461 = 1*461 + 14*61 + 146*1 

输入描述:无

输出描述:一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格

#include<stdio.h>
#include<math.h>
int main(){
for(int i=10000;i<99999;i++){
int sum=0;
for(int j=1;j<=4;j++){
int a=0,b=0;
a=i%(int)pow(10,j);
b=i/pow(10,j);
sum+=a*b;
}
if(i==sum){
printf("%d ",i);
}
}
return 0;
}

解题思路:

 12345
 1*2345+12*345+123*45+1234*5
首先我们得这个五位数拆分成4对数据,
int a=0,b=0;
a=i%(int)pow(10,j);
b=i/pow(10,j);
用局部变量a,b分别去保存这一对数据,用局部变量sum保存a*b的值,经历4次循环,sum累加后的值与本身这个数比较,就可以判断出是否是变种的水仙花数

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  ​​​​​​​文章来源地址https://www.toymoban.com/news/detail-788407.html

到了这里,关于「题解」关于sizeof陷阱,无符号整形,变种水仙花数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现 — —水仙花数(一问多解)

    在这次实例分享之前先祝自己生日快乐\\٩( ‘ω’ )و //// 水仙花数(Narcissistic number)是指一个三位整数,其各位数字的3次方和等于该数本身。例如:abc是一个\\\"水仙花数\\\",则:a的3次方+b的3次方+c的3次方 = abc。 for循环 在Python中通过range函数可以生成指定范围的整数

    2024年02月15日
    浏览(30)
  • c语言--使用函数输出水仙花数

    函数接口定义  1、int narcissistic( int number ); 2、void PrintN( int m, int n ); 函数   narcissistic  判断    number  是否为水仙花数,是则返回1,否则返回0。 函数   PrintN  则打印开区间  ( m ,  n )  内所有的水仙花数,每个数字占一行。  题目保证100≤ m ≤ n ≤10000。  裁判测试程序

    2024年02月07日
    浏览(39)
  • 【C语言必刷题】6. 水仙花数

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 水仙花数 的定义:一个三

    2024年04月10日
    浏览(27)
  • PTA 编程题(C语言)-- 水仙花数

    题目标题:水仙花数             题目作者:徐镜春  浙江大学 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3+5^3+3^3。 本题要求编写程序,计算所有N位水仙花数。 输入格式: 输入在一行中给出一个正整数N(3≤N≤7)。 输出

    2024年02月04日
    浏览(76)
  • C语言每天一练----输出水仙花数

    2024年02月15日
    浏览(65)
  • Python每日一练——第1天:水仙花数

    前言 📢📢 Python每日一练来啦,本文已收录于: 《Python每日一练》专栏 此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,每周持续更新中,欢迎免费订阅!!! 水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花

    2024年02月03日
    浏览(31)
  • C语言 打印0~100000之内的水仙花数

    已知: //求出0~100000之间的所有“水仙花数”并输出。 //水仙花数”是指一个n位数,其各位数字的n次方之和确好 // 等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

    2024年01月25日
    浏览(31)
  • Python小案例1:水仙花数及其自幂数

    用Python实现,水仙花数 水仙花 水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身。 ​ 自幂数 是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。 例如:1 3 + 5 3 + 3 3 = 153。

    2024年02月01日
    浏览(47)
  • 【华为OD机试】水仙花数Ⅰ【2023 B卷|100分】

    【 华为OD机试】-真题 !!点这里!! 【 华为OD机试】真题考点分类 !!点这里  !! 题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 = 1^3 + 5^3 + 3^3。 输入描述 第一行输入一个整数n,表示一个n位的

    2024年02月07日
    浏览(26)
  • C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数

    目录 1. 成绩打印  ※ 2. 按要求补齐数组  🌟🌟🌟 3. 水仙花数  ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 一个班有10个同学,通过键盘输入成绩, 并打印输出,每行输出5个同学的成绩。并求出平均成绩,最

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包