一段C语言程序转换为java的写法谢谢!
/*----------------------------------------------------------------------------函数名称:计算...
/*----------------------------------------------------------------------------
函数名称: 计算票面信息校验码
描述: 将给出的字符串经过运算生成四位数字校验码
参数:
input_str 原字符串
返回值:
生成的校验码
-----------------------------------------------------------------------------*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
char* calculateBillMac(char* input_str)
{
int input_len=strlen(input_str); //计算输入字符串长度
char* ascii_buff = (char*)malloc(10); //申请存储ASCII码的内存
char* str_buff_8 =(char*)malloc(1000); //申请存储八进制数字串的内存空间
char* str_buff_10 = (char*)malloc(1000);//申请存储十进制数字串的内存空间
char* str_return =(char*)malloc(10); //申请返回值内存空间
int i,len_8,len_10;
long sum8_1=0,sum8_2=0,sum10_1=0,sum10_2=0;//分别存储八进制和十进制不同算法取值的合计
//初始化内存空间
memset(ascii_buff,0,10);
memset(str_buff_8,0,1000);
memset(str_buff_10,0,1000);
memset(str_return,0,10);
for(i=0 ;i < input_len;i++){//对输入字符串的每一个字节进行循环
sprintf(ascii_buff,"%o",(unsigned char)input_str[i]); //将ASCII码值转换成八进制字符串
strcat(str_buff_8,ascii_buff); //所有八进制ASCII串连接
sprintf(ascii_buff,"%d",(unsigned char)input_str[i]); //将ASCII码值转换成十进制字符串
strcat(str_buff_10,ascii_buff); //所有十进制ASCII串连接
}
len_8= strlen(str_buff_8); //八进制字符串总长度
len_10 = strlen(str_buff_10); //十进制字符串总长度
//将八进制字符串的每一个字符转换成数字,并分别按照正序和反序乘以所在的位置序号
//例如:八进制串为 3452170467
// sum8_1 = 3*1 + 4*2 + 5*3 + 2*4 + 1*5 + ....
// sum8_2 = 7*1 + 6*2 + 4*3 + 0*4 + 7*5 + ....
for(i=1;i<=len_8;i++){
sum8_1 += (str_buff_8[i - 1] - '0')*i;
sum8_2 += (str_buff_8[len_8 - i] - '0')*i;
}
//将十进制字符串的每一个字符转换成数字,并分别按照正序和反序乘以所在的位置序号
for(i=1;i<=len_10;i++){
sum10_1 += (str_buff_10[i - 1] - '0')*i;
sum10_2 += (str_buff_10[len_10 - i] - '0')*i;
}
//释放申请的内存空间
free(str_buff_8);
free(str_buff_10);
free(ascii_buff);
sprintf(str_return,"%d%d%d%d",sum8_1%10,sum8_2%10,sum10_1%10,sum10_2%10);
return str_return;
}
谢谢 给个思路也行,主要是对C语言不熟悉 展开
函数名称: 计算票面信息校验码
描述: 将给出的字符串经过运算生成四位数字校验码
参数:
input_str 原字符串
返回值:
生成的校验码
-----------------------------------------------------------------------------*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
char* calculateBillMac(char* input_str)
{
int input_len=strlen(input_str); //计算输入字符串长度
char* ascii_buff = (char*)malloc(10); //申请存储ASCII码的内存
char* str_buff_8 =(char*)malloc(1000); //申请存储八进制数字串的内存空间
char* str_buff_10 = (char*)malloc(1000);//申请存储十进制数字串的内存空间
char* str_return =(char*)malloc(10); //申请返回值内存空间
int i,len_8,len_10;
long sum8_1=0,sum8_2=0,sum10_1=0,sum10_2=0;//分别存储八进制和十进制不同算法取值的合计
//初始化内存空间
memset(ascii_buff,0,10);
memset(str_buff_8,0,1000);
memset(str_buff_10,0,1000);
memset(str_return,0,10);
for(i=0 ;i < input_len;i++){//对输入字符串的每一个字节进行循环
sprintf(ascii_buff,"%o",(unsigned char)input_str[i]); //将ASCII码值转换成八进制字符串
strcat(str_buff_8,ascii_buff); //所有八进制ASCII串连接
sprintf(ascii_buff,"%d",(unsigned char)input_str[i]); //将ASCII码值转换成十进制字符串
strcat(str_buff_10,ascii_buff); //所有十进制ASCII串连接
}
len_8= strlen(str_buff_8); //八进制字符串总长度
len_10 = strlen(str_buff_10); //十进制字符串总长度
//将八进制字符串的每一个字符转换成数字,并分别按照正序和反序乘以所在的位置序号
//例如:八进制串为 3452170467
// sum8_1 = 3*1 + 4*2 + 5*3 + 2*4 + 1*5 + ....
// sum8_2 = 7*1 + 6*2 + 4*3 + 0*4 + 7*5 + ....
for(i=1;i<=len_8;i++){
sum8_1 += (str_buff_8[i - 1] - '0')*i;
sum8_2 += (str_buff_8[len_8 - i] - '0')*i;
}
//将十进制字符串的每一个字符转换成数字,并分别按照正序和反序乘以所在的位置序号
for(i=1;i<=len_10;i++){
sum10_1 += (str_buff_10[i - 1] - '0')*i;
sum10_2 += (str_buff_10[len_10 - i] - '0')*i;
}
//释放申请的内存空间
free(str_buff_8);
free(str_buff_10);
free(ascii_buff);
sprintf(str_return,"%d%d%d%d",sum8_1%10,sum8_2%10,sum10_1%10,sum10_2%10);
return str_return;
}
谢谢 给个思路也行,主要是对C语言不熟悉 展开
展开全部
按照你的要求,C语言程序转换成的Java程序如下:
public class GGG {
public static String calculateBillMac(String input_str){
String str_buff_8 ="",str_buff_10 = "",str_return = "";
long sum8_1=0,sum8_2=0,sum10_1=0,sum10_2=0;//分别存储八进制和十进制不同算法取值的合计
for(int i=0 ;i < input_str.length();i++){//对输入字符串的每一个字节进行循环
str_buff_8+=Integer.toOctalString(input_str.charAt(i));//将ASCII码值转换成八进制字符串
str_buff_10+=Integer.toString(input_str.charAt(i)); //将ASCII码值转换成十进制字符串
}
for(int i=1;i<=str_buff_8.length();i++){
sum8_1 += (str_buff_8.charAt(i - 1) - '0')*i;
sum8_2 += (str_buff_8.charAt(str_buff_8.length()-i) - '0')*i;
}
for(int i=1;i<=str_buff_10.length();i++){
sum10_1 += (str_buff_10.charAt(i - 1) - '0')*i;
sum10_2 += (str_buff_10.charAt(str_buff_10.length() - i) - '0')*i;
}
str_return=""+sum8_1%10+sum8_2%10+sum10_1%10+sum10_2%10;
return str_return;
}
public static void main(String[] args) {
System.out.println(calculateBillMac("abcdef"));
}
}
运行结果:
2739
这个数据和C语言用字符串"abcdef"测试的结果相同.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |