这段代码如何在碱基之间转换?
How does this code convert between bases?
#include<stdio.h>
#include<string.h>
void baseconversion(char s[20], int, int);
main()
{
char s[20];
int base1, base2;
printf("Enter the number and base:");
scanf("%s%d", s, &base1);
printf("Enter the base to be converted:");
scanf("%d", &base2);
baseconversion(s, base1, base2);
}
void baseconversion(char s[20], int b1, int b2)
{
int count = 0, r, digit, i, n = 0, b = 1;
for(i = strlen(s) - 1; i >= 0; i--)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
digit = s[i] - '0' - 7;
}
else
{
digit = s[i] - '0';
}
n = digit * b + n;
b = b * b1;
}
while(n != 0)
{
r = n % b2;
digit = '0' + r;
if(digit > '9')
{
digit += 7;
}
s[count] = digit;
count++;
n = n / b2;
}
for(i = count - 1; i >= 0; i--)
{
printf("%c", s[i]);
}
printf("\n");
}
我知道这段代码将字符转换为整数,但我以前从未见过,从未使用过 C。
如果有人能解释一下转换过程中发生了什么,我将不胜感激,谢谢。
我知道在某些时候数字会颠倒。
分两步完成,第一步是将数字转化为小数形式,这部分:
for(i = strlen(s) - 1; i >= 0; i--) //Start from right to left
{
if(s[i] >= 'A' && s[i] <= 'Z')
digit = s[i] - '0' - 7; //Get the integer equivalent to the letter
else
digit = s[i] - '0'; //Get the integer equivalent to the numerical character
n = digit * b + n; //Add the value of this character at this position
b = b * b1; //The value of the next character will be higher b times
}
然后将结果转换为所需的基数,在这部分:
while(n != 0)
{
r = n % b2; //The remaining will be the rightmost value for the new base
digit = '0' + r; //Get the integer for the new digit
if(digit > '9')
digit += 7; //Here the digit will be a letter
s[count] = digit;
count++;
n = n / b2; //Remove the rightmost digit to get the next one
}
#include<stdio.h>
#include<string.h>
void baseconversion(char s[20], int, int);
main()
{
char s[20];
int base1, base2;
printf("Enter the number and base:");
scanf("%s%d", s, &base1);
printf("Enter the base to be converted:");
scanf("%d", &base2);
baseconversion(s, base1, base2);
}
void baseconversion(char s[20], int b1, int b2)
{
int count = 0, r, digit, i, n = 0, b = 1;
for(i = strlen(s) - 1; i >= 0; i--)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
digit = s[i] - '0' - 7;
}
else
{
digit = s[i] - '0';
}
n = digit * b + n;
b = b * b1;
}
while(n != 0)
{
r = n % b2;
digit = '0' + r;
if(digit > '9')
{
digit += 7;
}
s[count] = digit;
count++;
n = n / b2;
}
for(i = count - 1; i >= 0; i--)
{
printf("%c", s[i]);
}
printf("\n");
}
我知道这段代码将字符转换为整数,但我以前从未见过,从未使用过 C。
如果有人能解释一下转换过程中发生了什么,我将不胜感激,谢谢。
我知道在某些时候数字会颠倒。
分两步完成,第一步是将数字转化为小数形式,这部分:
for(i = strlen(s) - 1; i >= 0; i--) //Start from right to left
{
if(s[i] >= 'A' && s[i] <= 'Z')
digit = s[i] - '0' - 7; //Get the integer equivalent to the letter
else
digit = s[i] - '0'; //Get the integer equivalent to the numerical character
n = digit * b + n; //Add the value of this character at this position
b = b * b1; //The value of the next character will be higher b times
}
然后将结果转换为所需的基数,在这部分:
while(n != 0)
{
r = n % b2; //The remaining will be the rightmost value for the new base
digit = '0' + r; //Get the integer for the new digit
if(digit > '9')
digit += 7; //Here the digit will be a letter
s[count] = digit;
count++;
n = n / b2; //Remove the rightmost digit to get the next one
}