My problem is that i dont know what this functions do, thats program from my teacher(not whole program just functions). Just wanna ask you what this functions do, mainly why i store my number from right to left at string? thanks
#include<stdio.h>
#include<string.h>
#define MAX 1000
void str_to_num(char *str, char *number, int *dlzka)
{
int i;
for(i=0; i < MAX; i++)
number[i] = 0;
*dlzka = strlen(str);
for(i = 0; i < *dlzka; i++)
cis[(*dlzka) - 1 - i] = str[i] - '0';
}
void plus(char *cislo, int *d1, char *cis2, int d2)
{
int i; prenos = 0;
if(*d1 < d2)
*d1 = d2;
for(i = 0; i < *d1; i++)
{
pom = number[i] + number[i];
pom += prenos;
number[i] = pom % 10;
prenos = pom / 10;
}
}
最佳答案
这是您的老师应该教授的类(class):
- 数值 1 与用于表示屏幕上显示或键盘上键入的字符
1
的计算机代码(例如 ASCII)之间存在差异。
每当您在屏幕上看到 1
时,您的计算机就会在内存中看到 49。
0
是 48,2 是 50,依此类推。
为了方便起见,所有数字字符都按 0 到 9 的顺序排列,因此要将它们的字符代码转换为数值,只需减去字符代码 0 即可得到序列中的数字位置。
例如:49 - 48 = 1 --> '1' - '0' = 1
这就是第一个函数 str_to_num
的工作原理。
- C 语言没有提供足够大的变量来处理 100 位数字,因此您需要一次对一位数字进行求和。
第二个函数的变量名完全错误,但它试图要做什么仍然非常明显: 它对两个个位数求和,然后将结果的个位部分存储在数组中,并将第十个数字(如果总和 > 9)存储在辅助变量中。
正如评论中已经建议的那样,这是您在页面上一次一位数字地手动求和数字的方法。
我不知道 prenos
在你的语言中意味着什么,但在英语中这个变量应该被称为 carry
并且它会保留下一轮溢出的十位数。
但是 sum 函数缺少一些东西:如果最后(最左边)两位数字的总和超过 9,则多余的 1 将丢失,结果将是错误的。
检查你的老师给你的原始代码 - 要么你复制错了,要么他给出了一个不好的例子。
关于c - 如何在C中使用字符串存储100位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53399756/