我正在编写一个不使用printf的打印整数函数 . 该函数应该能够接受需要打印的整数,输出的基数以及要在整数值之前插入的字符 . 我已经能够制作大部分代码;然而,一旦输入超过15亿,输出保持不变,大约为10亿 . 在平台上我使用INT_MAX是21.7亿,所以我知道这肯定在int的范围内 . 另外,我想知道如何在没有静态数组的情况下创建这个函数:在我的情况下是baseDigs .
#include
#include
#include
#include
#include "hw02.h"
int Pow(int a, int b);
void print_integer(int n, int radix, char* prefix){
if(radix == 0){
return -1;
}
char baseDigs[36]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','n','p','q','r','s','t','u','v','w','x','y','z'};
unsigned int buffer = n;
int dollar = 0;
int counter = 0;
int counter2 = 0;
int counter3 = 0;
int j = 0;
if (prefix[0] == '$'){
dollar++;
}
if(n < 0){
fputc('-', stdout);
buffer = -buffer;
}
while(prefix[j] != '\0'){
fputc(prefix[j], stdout);
j++;
}
while (buffer >= radix){
counter = 0;
counter2 = 0;
while((Pow(radix, counter)) <= buffer){
counter++;
}
counter--;
while(counter3 - counter > 1){
fputc('0', stdout);
counter3--;
}
counter3 = counter;
while((Pow(radix, counter)* counter2)<= buffer){
counter2++;
}
counter2--;
if (dollar > 0){
if(counter == 1){
fputc('.', stdout);
}
}
putchar(baseDigs[counter2]);
buffer-= Pow(radix,counter) * counter2;
}
while(counter3 > 1){
fputc('0', stdout);
counter3--;
}
fputc(baseDigs[buffer], stdout);
return;
}
int Pow(int a, int b){
if(b<0){
return (1/a) * Pow(a ,b-1);
}
else if (b==0) {
return 1;
}
else if (b==1){
return a;
}
else{
return a * Pow(a,b-1);
}
}