我想通过将整数ASCII码并置为字母来将Name和Surname(例如Nova Stark)转换为大整数,打印相应的转换后的整数,然后将大整数切成两半,然后将两半相加。以下是我的方法:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* arr2str(int arr[], int size) {
static char buffer[256];
memset(&buffer[0], 0, sizeof(buffer)/sizeof(char));
char *ptr = &buffer[0];
for(int i=0; i<size; ++i) {
sprintf(ptr += strlen(ptr), "%d", arr[i]);
}
return buffer;
}
int arr2int(int arr[], int size)
{
char buffer[256] = {0,};
char *ptr = &buffer[0];
for(int i = 0; i < size; ++i) {
sprintf(ptr += strlen(ptr), "%d", arr[i]);
}
return atoi(&buffer[0]);
}
int main()
{
int *A;
long long int num;
int div,base=10;
char name[50],asc[200];
printf("Enter your name : ");
scanf(" %[^\n]",name);
int len=strlen(name);
A=(int*)malloc(len*sizeof(int));
for(int i=0;i<len;i++)
{
A[i]=name[i];
}
char *str = arr2str(A, len); //for converting array to string
num = arr2int(A, len); //again for converting the character array to integer.
//num=array_to_num(A,len);
div=base;
while(num/div>div)
{
div=div*base;
}
long long int a=num/div;
long long int b=num%div;
long long int c=a+b;
printf("The required integer is %lld and the sum is %lld ",num,c);
return 0;
}
以下正在运行,有关说明,请参见代码中的注释。也许你必须处理名称中的空格:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int *A;
long long int num;
int div,base=10;
char name[50];
printf("Enter your name : ");
scanf(" %[^\n]",name);
int len=strlen(name);
A=(int*)malloc(len*sizeof(int));
for(int i=0;i<len;i++)
{
*(A+i)=(int)name[i]; // *(A+i) is accessing array as pointer+index : https://www.programiz.com/c-programming/c-dynamic-memory-allocation
// letters to ascii is done by simply typecasting to (int)
}
// string to int array
for(int i=0;i<len;i++)
{
printf("%i -> %c \n", *(A+i), (char)(*(A+i)));
}
// long long int from concatenating the elements of the int array
int s_idx=0; // index for string
char str[512]; //string of fixed size, possibly malloc this
for (int i=0; i<len; i++)
s_idx += snprintf(&str[s_idx], 512-s_idx, "%d", *(A+i));
printf("%s \n", str);
num = strtoll(str, NULL, 10); // https://en.cppreference.com/w/c/string/byte/strtol
// from here your code is unchanged
div=base;
while(num/div>div)
{
div=div*base;
}
long long int a=num/div;
long long int b=num%div;
long long int c=a+b;
printf("The required integer is %lld and the sum is %lld \n ",num,c);
free(A);
return 0;
}