关键不能改动主函数让我难以解决
void itostr(int num, char str[]) {
const int MAX_LEN = 20;
char tmp[MAX_LEN] = { '\0' };
// 数字转字符
int i = 0;
while(num >= 0) {
tmp[i++] = num % 10 + '0';
num /= 10;
}
// 反转字符串
for(int j = 0, i = i - 1; i >=0; j++, i--) {
str[j] = tmp[i];
}
}
大概就是这样,
十进制整数 % 10 取个位, / 10 取高位,知道这个就不难做了
#include
using std::cin;
using std::cout;
using std::endl;
void itostr(int num, char str[]);
int main()
{
const int SIZE = 20;
int t, num;
char str[SIZE];
cin >> t;
while (t--)
{
cin >> num;
itostr(num, str);
cout << str << endl;
}
return 0;
}
void itostr(int num, char str[])
{
_itoa_s(num, str, 40, 10);
}
前面代码有错误,我改了一下
void itostr(int num, char str[]) {
const int MAX_LEN = 20;
char tmp[MAX_LEN] = { '\0' };
int i = 0;
while(num > 0) {
tmp[i++] = (num % 10) + '0'; // 数字转字符
num /= 10;
}
// 反转字符串
for(int j = 0, k = i - 1; k >=0; j++, k--) {
str[j] = tmp[k];
}
str[i] = '\0';
}
大概就是这样,
十进制整数 % 10 取个位, / 10 取高位,知道这个就不难做了
void itostr(int num,char str[])
{
//计算sum的位数 注意:当sum是3位数的时候i=2
int n=sum;
for(int i=19;n!=0;i--)
{
n/=10;
}
i++;
//num大于等于2位数
if(i<=18)
{
str[i]=num%10+'0';
itostr(num/10,str);
}
else //sum=1位时str[19]=num;
{
str[i]=num;
for(int j=
}
}
我想不下去了,因为有一点无法弄好,那就是无法确认这个num的长度,思想是从低位数到高位数截取,每次递归截取一个,然后num消去最低位继续递归,
直到num是1位数的时候 就结束,在这个过程中一直给str[]数组赋值,每次进入递归的时候都要重新判断num的位数,用位数确认数组下标进行str[]赋值操作,
问题来了,那就是无法确认到底有多长这个数组,因为不可修改源代码,你想想怎么才能在递归函数中加一个标志字符串结束的标志位。。
void itostr(int num,char str[]) 例如 123 str[17]=123%10=3 str[18]=12%10=2; str[19]=1%10=1; 最终i绝对会等于19,但是你不知道之前i最小是多少的问题~
{
int n=sum;
for(int i=19;n!=0;i--)
{
n/=10;
}
i++;
//num大于等于2位数
if(i<=18)
{
str[i]=num%10+'0';
itostr(num/10,str);
}
else //sum=1位时str[19]=num;
{
str[i]=num;
for(int j=
}
}