#题目信息
计算机的内存容量以字节(BYTE,简称B)为基本单元组织,K(千)、M(兆)、G(吉)三个数量级单位定义为:
1千字节:1KB = 1024B
1兆字节:1MB = 1024KB
1吉字节:1GB = 1024MB
现在编写一个内存单位换算的程序。
Input
输入为一个整数,表示内存中n个字节,0<=n<232。
Output
输出三行:第一行为KB数,不足K的舍去;第二行为MB数、第三行为GB数,均保留两位小数。
初步想法如图所示
求错误指正,不足K的舍去 怎么处理
以及程序可以run但数据输出结果都为0
使用codeblocks编写的程序
谢谢帮助!
将n的数据类型改为long long ,因为2^32= 4294967296 ,超过了int的取值范围,所以需要将n改为更大范围的整数数据类型。
然后在第7、第8、第9行时,计算结果要保留小数的话,需要将整数类型转为浮点数类型,可以在式子前面乘以1.0。
最后小于1K的结果需要舍去。
修改如下:
参考链接:
#include <stdio.h>
int main(void){
// https://blog.csdn.net/hhmy77/article/details/82429260
// 因为2^32超过int的取值范围,所以n需要改为更大的整数数据类型
long long n;
double a,b,c;
scanf("%lld",&n);
// 保留小数结果,需要将整数转为浮点数 ,可以在式子前乘以1.0
a=1.0*n/1024;
b=1.0*n/1024/1024;
c=1.0*n/1024/1024/1024;
// 大于等于1K的显示保留2位小数的结果
if (a>=1.0){
printf("%.2lfK\n",a);
}else{ // 小于1K的输出为0.00K
printf("0.00K\n");
}
printf("%.2lfM\n",b);
printf("%.2lfG\n",c);
return 0;
}
【以下回答由 GPT 生成】
首先,我们来看一下你的代码。根据你的描述,你的问题主要是如何处理不足1K的情况,以及输出结果为0的问题。
#include <stdio.h>
int main() {
int size_in_byte;
float size_in_kbyte, size_in_mbyte, size_in_gbyte;
printf("请输入内存容量(单位:字节):");
scanf("%d", &size_in_byte);
size_in_kbyte = size_in_byte / 1024;
size_in_mbyte = size_in_kbyte / 1024;
size_in_gbyte = size_in_mbyte / 1024;
printf("内存容量为:%f GB \n", size_in_gbyte);
printf("内存容量为:%f MB \n", size_in_mbyte);
printf("内存容量为:%f KB \n", size_in_kbyte);
printf("内存容量为:%d B \n", size_in_byte);
return 0;
}
问题1:如何处理不足1K的情况?
在现有代码中,你简单地使用了除法运算来计算不同内存单位之间的换算关系。然而,这种方法并不能处理不足1K的情况,因为它会使用浮点数来存储结果。
要解决这个问题,我们可以使用取余(modulus)运算符来计算不足1K的字节数,并将其舍去。下面是修改后的代码:
#include <stdio.h>
int main() {
int size_in_byte;
int size_in_kbyte, size_in_mbyte, size_in_gbyte;
int remainder; // 新增的变量用于存储不足1K的字节数,即余数
printf("请输入内存容量(单位:字节):");
scanf("%d", &size_in_byte);
size_in_kbyte = size_in_byte / 1024; // 计算KByte,并将结果以整数保存
remainder = size_in_byte % 1024; // 计算不足1K的字节数
size_in_mbyte = size_in_kbyte / 1024; // 计算MByte,并将结果以整数保存
size_in_kbyte = size_in_kbyte % 1024; // 修正KByte,将不足1M的字节数加回
size_in_gbyte = size_in_mbyte / 1024; // 计算GByte,并将结果以整数保存
size_in_mbyte = size_in_mbyte % 1024; // 修正MByte,将不足1G的字节数加回
printf("内存容量为:%d GB\n", size_in_gbyte);
printf("内存容量为:%d MB\n", size_in_mbyte);
printf("内存容量为:%d KB\n", size_in_kbyte);
printf("内存容量为:%d B\n", remainder);
return 0;
}
问题2:输出结果始终为0的问题
在你的代码中,你使用了浮点数变量(float
)来存储内存容量。然而,由于你的计算是以整数除以整数的方式进行的,结果会被直接截断为整数。因此,你应该使用整数变量(int
)而不是浮点数来存储计算结果。
在修改后的代码中,我将内存容量的变量类型(size_in_kbyte
、size_in_mbyte
、size_in_gbyte
)都改为整数类型。
请尝试使用修改后的代码,应该能够解决你遇到的问题。如果还有其他问题,请随时提问。