我在这里的犯的错误:
1.在A~~Z这里纠结26进制,还是27进制。
2.进行取余运算时,考虑是0~25,应该是1~26,所以应该使用 (tmp - 1 )% 26 + 1;
这样就可以使tmp的值在1~26,并且这是按顺序的,Z就是26,
3.还有一个没想到的就是,除法处理,让X直接 /= 26; 导致这里的精度错误,应该减去 tmp 后再进行除法,因为当tmp == 26 ,时,就会导致错误。
char* convertToTitle(int columnNumber) {
char *ans =malloc(sizeof(char)*(8));
int len=0;
while(columnNumber>0)
{ int tmp;
tmp = (columnNumber - 1) % 26 + 1;
ans[len++] = tmp + 'A' -1 ;
columnNumber = (columnNumber - tmp)/26;
}
for (int i = len-1; i > (len-1) / 2; i--)
{
char t = ans[i];
ans[i] = ans[len-1-i];
ans[len-1-i] = t;
}
ans[len] = '\0';
return ans;
}
力扣2两数相加
俩个链表,逆序储存着数,第一个代表的各位数。
这里考虑进位,还有链表的长度不同。
题解:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *head = NULL, *tail = NULL;
int carry = 0;
while(l1 || l2)
{
int sum =0;
int n1 = l1 !=NULL ? l1->val :0;
int n2 = l2 !=NULL ? l2->val :0;
sum =n1 + n2 + carry;
if(head == NULL)
{
head = malloc(sizeof(struct ListNode));
tail = head;
head->val = sum % 10;
tail->next = NULL;
}else{
tail->next = malloc(sizeof(struct ListNode));
tail->next->val = sum % 10;
tail = tail->next;
tail->next =NULL;
}
carry = sum / 10;
if(l1 != NULL)
{
l1 = l1->next;
}
if(l2 != NULL)
{
l2 = l2->next;
}
}
if(carry>0)
{
tail->next = malloc (sizeof(struct ListNode));
tail = tail->next;
tail->val = carry;
tail->next = NULL;
}
return head;
}