一段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语言不熟悉
展开
 我来答
紫薇参星
科技发烧友

2014-10-19 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3606万
展开全部

按照你的要求,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"测试的结果相同.

天白云阔6511
2014-10-19 · TA获得超过503个赞
知道小有建树答主
回答量:961
采纳率:0%
帮助的人:348万
展开全部
高手啊,建站用的吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式